私はこの正規表現を持っています
(?:$|^| )(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's
のone
またはWord'word
のWordと一致させたくない。
キャプチャグループは、共通のWordの両側に1つの文字を明示的に定義しているため、space
Word
space
を探してから、別のspace
、失敗します。
この場合、Wordの境界がキャッチするすべての文字(ピリオド、アポストロフィなど)に一致させる必要はないため、先読み、後読み、および非キャプチャグループで少し策略を使用する必要があります。これを試して:
(?:^|(?<= ))(one|common|Word|or|another)(?:(?= )|$)
単語の境界はまだ実装が簡単なので、参考のために、これを行うこともできます(ただし、'
、.
など)。
\b(one|common|Word|or|another)\b
代わりに(?:[\s]|^)(one|common|Word|or|another)(?=[\s]|$)
を使用できます。
one's
、someone
などとは一致しません...
チェック[〜#〜] demo [〜#〜]