0 レビュー
3 回答
php-正規表現:存在できない特定の単語の一致を停止する方法
タイトルがわかりにくいので、認めます。変更したい場合は、大歓迎です。
PHPとpreg_match関数に取り組んでいます。
問題はこの文字列です(単なる例)
ON DELETE SET NULL ON UPDATE CASCADE
ON DELETE CASCADE ON UPDATE CASCADE (別の例..)
ONDELETEとONUPDATEの値を見つける必要がありますが、両方を見つけることはできません。
だから時々私はこれを持っています:
ON DELETE something
およびその他の時間:
ON UPDATE something
およびその他の場合は両方。
したがって、この正規表現はすべての可能性を網羅しているわけではありません:
/ON DELETE (.+) ON UPDATE (.+)/
入れたら
/ON DELETE (.+)( ON UPDATE (.*))?/
-更新がない場合をカバーする
ON UPDATEが存在する場合、最初のグループは「SET NULLONUPDATECASCADE」になります。
どうすればよいですか?
わからない
0
レビュー
答え :
解決策:
一致しすぎないようにする場合は、ルックアラウンドを使用します:
ネガティブな先読み:
/ON DELETE ((?:(?! ON UPDATE).)+)( ON UPDATE (.*))?/
注文を無視してキャプチャするには:
/(?:ON DELETE ((?:(?! ON UPDATE).)+)|ON UPDATE ((?:(?! ON DELETE).)+))/
しかし、あなたは正確に何が欲しいですか?両方が存在する場合は削除しますか?
わからない
0
レビュー
答え :
解決策:
削除時と更新時の両方ではなく、発生時に一致する擬似コード
function valid(str)
{
matchDelete=regex(str, 'ON DELETE'); //true for match
matchUpdate=regex(str, 'ON UPDATE'); //true for match
if( (matchDelete || matchUpdate ) && !(matchDelete && matchUpdate) )
{
valid match
}
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。