2012-07-16 87 views
1

如何建立,搜索在文本T和试图找到搜索字符串S的正则表达式模式如何写一个正则表达式,防止部分匹配

有2个要求:

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

我知道,为了逃避特殊的正则表达式字符我把这样\ Q和\ E之间的搜索字符串:

\ EMySearch_String \ Q

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

+1

你是什么意思的“不能成为一个词的一部分”?这是否意味着它必须是整个单词?你能否给出一些正面和负面的例子? – walrii 2012-07-16 04:25:28

+1

你看过这个解决方案吗?http://stackoverflow.com/questions/5091057/how-to-find-a-whole-word-in-a-string-in-java能帮助你吗? – vcetinick 2012-07-16 04:30:11

+0

@vcetinick:'\\ b'在这里并不好,因为'S'可以包含任何字符。 – Keppil 2012-07-16 06:09:32

回答

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

0

我觉得你试图找到的东西可以用lookaheads和lookbehinds轻松解决。 Take a look at this for a good explanation.

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

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