如何编写一个阻止部分匹配的正则表达式

时间:2012-07-16 03:57:43

标签: java regex search partial

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

有2个要求:

  1. S可以由任何角色组成。
  2. S可以在字符串中的任何位置但不能成为单词的一部分。
  3. 我知道为了逃避特殊的正则表达式字符,我把搜索字符串放在\ Q和\ E之间:

    \ EMySearch_String \ Q

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

2 个答案:

答案 0 :(得分: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 / ^()'

答案 1 :(得分:0)

我认为你想要找到的东西很容易通过前瞻和外观来解决。 Take a look at this for a good explanation.

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

(?<!\S)S(?!\S)