テキストTを検索し、検索文字列Sを見つけようとする正規表現パターンを作成するにはどうすればよいですか。
2つの要件があります。
- Sは任意の文字で作成できます。
- Sは文字列のどこにあってもかまいませんが、単語の一部にすることはできません。
特殊な正規表現文字をエスケープするために、検索文字列を\Qと\Eの間に配置することを知っています。
\ EMySearch_String \ Q
TでSの部分一致が見つからないようにするにはどうすればよいですか?
can't be part of a word
次のように解釈される場合は、このようにすることができます
preceded by start-of-string or space and followed by end-of-string or space
。
String s = "3894$75\\/^()";
String text = "fdsfsd3894$75\\/^()dasdasd 22348 3894$75\\/^()";
Matcher m = Pattern.compile("(?<=^|\\s)\\Q" + s + "\\E(?=\\s|$)").matcher(text);
while (m.find()) {
System.out.println("Found match! :'" + m.group() + "'");
}
これは1つだけを印刷します
一致するものが見つかりました!:'3894 $ 75 / ^()'
あなたが見つけようとしているものは、先読みと後読みで簡単に解決できると思います。良い説明のためにこれを見てください。
次に、少しフリップフロップのブール値がありますが、空白以外の文字(\ S)を前後に探しています。Sが文字列の先頭または末尾にある可能性があるため、スペース文字だけを検索する必要はありません。そのようです:
(?<!\S)S(?!\S)