0

如何构建搜索文本 T 并尝试查找搜索字符串 S 的正则表达式模式。

有2个要求:

  1. S 可以由任何字符组成。
  2. S 可以在字符串中的任何位置,但不能是单词的一部分。

我知道为了逃避特殊的正则表达式字符,我将搜索字符串放在 \Q 和 \E 之间,如下所示:

\EMySearch_String\Q

如何防止在 T 中找到 S 的部分匹配?

4

2 回答 2

1


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/^()'

于 2012-07-16T06:38:50.250 回答
0

我认为您要查找的内容可以通过前瞻和后视轻松解决。看看这个以获得很好的解释。

然后是一些翻转的布尔值,但您正在前后查看非非空格字符 (\S)。您不想仅仅因为 S 可能位于字符串的开头或结尾而查找空格字符。像这样:

(?<!\S)S(?!\S)
于 2012-07-16T19:01:15.927 回答