長い単語の一部ではない単語だけに一致する正規表現を探しています。
単語が「失敗」であると仮定しましょう、それでここにいくつかの例があります
failure bla bla
-一致する必要がありますbla failure.
-一致する必要がありますno-failure bla
-一致してはいけません
主に文字列は、一部と見なされるためにその周りにあるfailure
必要はありません[\d\w-_]
単語を構成する文字のグループにダッシュを含めているため、単語の境界ではできません。ルックアラウンド アサーションが必要です (Java でサポートされています)。
(?<![\w-])failure(?![\w-])
するべきです。
説明:
(?<![\w-]) # Assert no alphanumeric or dash before the current position
failure # Match "failure"
(?![\w-]) # Assert no alphanumeric or dash after the current position
正規表現のフレーバーがそれをサポートしている場合は\b
、単語の区切りで一致させるために使用できます/\bfailure\b/
。
正規表現にはあまり適していません。
String.split を使用して単語に分割し、各単語をターゲットと比較してみませんか (スペースで区切られている場合にのみ一致する必要があるため)。
まあ、String.split は Regex を使用しますが、はるかに制御されており、実際にはスペースのデフォルトの分割のみが必要であるか、ピリオドを追加したい場合があります (したがって、2 番目の例が一致します)。