如何构建搜索文本 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() + "'");
}
这仅打印一个
找到匹配!:'3894$75/^()'
我认为您要查找的内容可以通过前瞻和后视轻松解决。看看这个以获得很好的解释。
然后是一些翻转的布尔值,但您正在前后查看非非空格字符 (\S)。您不想仅仅因为 S 可能位于字符串的开头或结尾而查找空格字符。像这样:
(?<!\S)S(?!\S)