web-dev-qa-db-ja.com

周囲の文字のリストなしで単語のリストに一致

私はこの正規表現を持っています

(?:$|^| )(one|common|Word|or|another)(?:$|^| )

これは、2つの単語が隣り合っていない限り問題なく一致します。

One one's more Word'word common Word or another Word more another 

More and more years to match one or more other strings

And common Word things and or

上記では、2行目のoneに一致しますが、すぐ隣のorには一致しません。 3行目のcommonおよびWord intについても同じです。

ライブの例: http://regex101.com/r/hV3wQ

一致しないグループの数と関係があると思います。しかし、単語のすべてのリストを、文字を囲むことなく一致させるという最終目標を達成する方法がわかりません。

one'soneまたはWord'wordのWordと一致させたくない。

19
San

キャプチャグループは、共通のWordの両側に1つの文字を明示的に定義しているため、spaceWordspaceを探してから、別のspace、失敗します。

この場合、Wordの境界がキャッチするすべての文字(ピリオド、アポストロフィなど)に一致させる必要はないため、先読み、後読み、および非キャプチャグループで少し策略を使用する必要があります。これを試して:

(?:^|(?<= ))(one|common|Word|or|another)(?:(?= )|$)

http://regex101.com/r/cM9hD8

単語の境界はまだ実装が簡単なので、参考のために、これを行うこともできます(ただし、'.など)。

\b(one|common|Word|or|another)\b
33
brandonscript

代わりに(?:[\s]|^)(one|common|Word|or|another)(?=[\s]|$)を使用できます。

one'ssomeoneなどとは一致しません...

チェック[〜#〜] demo [〜#〜]

2
Sujith PS