-1

次の排他的な正規表現は、角かっこ内の文字のみに一致する (エラーをスローする) 必要があります < > = ただし、文字列の末尾にあるスペースもスローします。なんで?

/^((?![<>=]).)*$/
4

1 に答える 1

0

完全な文字列の場合は、見回す必要はありません。問題は、ルックアラウンドが機能するために一定数の文字が必要なことです (実装によっては、通常はワイルドカードがないことを意味します)。

文字列全体をチェックする場合は、これを使用できます。

/^[^<>=]+$/

文字列の先頭で発生しないことを確認しようとしている場合は、次を使用できます

/^[^<>=]/   

文字列の終わり

/[^<>=]$/

開始または終了 (途中は気にしないでください) を使用できるはずです。

/(^[^<>=]|[^<>=]$)/

次のコードを使用して PHP でこれらをテストすると、次のようになります。

<?php

$phrases = array('dog','cat=dog','<a href=','bird=');

$patterns = array('/^[^<>=]+$/','/^[^<>=]/','/[^<>=]$/','/(^[^<>=].*[^<>=]$)/');

foreach($phrases as $phrase){

    foreach($patterns as $pattern){
        if(preg_match($pattern,$phrase)){
       echo '`'.$pattern."` matches `".$phrase."`\n";   
    } else {
       echo '`'.$pattern."` doesn't match `".$phrase."`\n";         
        }
    }


}


?>

次の出力が得られます

/^[^<>=]+$/マッチdog

/^[^<>=]/マッチdog

/[^<>=]$/マッチdog

/(^[^<>=].*[^<>=]$)/マッチdog

/^[^<>=]+$/一致しませんcat=dog

/^[^<>=]/マッチcat=dog

/[^<>=]$/マッチcat=dog

/(^[^<>=].*[^<>=]$)/マッチcat=dog

/^[^<>=]+$/一致しません<a href=

/^[^<>=]/一致しません<a href=

/[^<>=]$/一致しません<a href=

/(^[^<>=].*[^<>=]$)/一致しません<a href=

/^[^<>=]+$/一致しませんbird=

/^[^<>=]/マッチbird=

/[^<>=]$/一致しませんbird=

/(^[^<>=].*[^<>=]$)/一致しませんbird=

于 2013-08-14T15:49:52.957 に答える