2011-01-12 7 views
2

私は次の[^ h]を実行してすべての一致が 'h'で一致するようにすることができることを知っています。 ^(word)のような単語全体でこれを行うにはどうすればよいですか?正規表現の単語で停止する

+1

質問を正しく説明してください – Rozuur

答えて

9

あなたはfooが同一でないことを文字列にマッチさせたい場合は:

^(?!.*foo).*$ 

場合:が含まれていないことを文字列fooを一致させたい場合は

^(?!foo).*$ 

fooが含まれていない文字列を完全な単語として一致させたい場合

^(?!.*\bfoo\b).*$ 

あなたはを表示さfooまでの文字列にマッチし、foo前に試合を停止する場合:

^(?:(?!foo).)* 

をあなたが設定する必要がある場合がありますので、これらのソリューションは、文字列内の改行を処理しません。これは問題であれば.NETのRegexOptions.Singlelineのような対応する正規表現のオプションです。試合中に任意の文字を消費していない間

(?!foo)は、(「先を見て」)は、文字列内の現在位置以下fooに一致するように(「ネガティブ」)それが不可能であることを主張することを意味し、zero-width negative lookahead expressionです試み(「ゼロ幅」)。

3

正規表現でこれを行うのは本当に良い方法ではありません。あなたが得ることができる最も近いが...のみ場合、それが負の先読みの文字列が続いていない正規表現を見つけるnegative lookaheadを使用することです:

foo(?!word) 

のみfoowordが続かないでしょう。

同じことが(代わりに先)の背後に見てのために存在する:それはwordが先行していない場合

(?<!word)foo 

fooを見つけるでしょう。

関連する問題