3

「I」と「同意しない」という単語の間の最短の文字シーケンスを見つけようとしています (大文字と小文字は区別されません)。SOに関する同様の質問をすべて読みましたが、どの解決策もうまくいかないようです。これが私を悲しませている例文です:

アメリカ人として、私はあなたに反対しなければなりません。

そして、正規表現パターンに関する私の最善の推測は次のとおりです。

同意しません

"must"だけをキャプチャしたいのですが、代わりに、より長い文字列"can, I must" をキャプチャしています。「I」の後にスペースなどの何かが続く必要があることを指定する必要がないことを望んでいます。なぜなら、「私はそれに反対します」のような文には何も捉えられないからです。また、「I」を大文字にする必要はありません。基本的に、可能な限り貪欲でない一致が欲しいだけです。このサイトは、解決策を検証するために私が使用している場所の 1 つです。

http://regexpal.com/?flags=gi®ex=I%28.*%3F%29%20disagree&input=As%20an%20American%2C%20I%20must%20disagree%20with%20you.

4

3 に答える 3

1

単語境界を使用する ( \b):

/\bi(.*?)\bdisagree/i
  • 大文字小文字を区別しません
  • に一致しますが、一致IしませんI'll('llはキャプチャの一部になります)
于 2013-08-04T05:50:47.703 に答える
1

一般的なアプローチは、否定先読みを使用することです。

(I)(((?!\1).)*?) disagree

ここでデモを参照してください。

間にある単語のグループが now であることに注意してください$2。それを望まない場合は、最初の単語を繰り返すことができます:

I((?:(?!I).)*?) disagree

しかし、特に単語が大きい場合は、最初のバージョンの方が維持しやすいと思います。

于 2013-08-04T05:47:53.093 に答える