2013-08-02 29 views
0

我需要寻找"$SE"关键字进行下列句子。java的正则表达式来找到确切的词有特殊字符

$SEBGI is there 
there is $SE. 
there is SE again 

输出应该如下:

FALSE 
TRUE 
FALSE 

我具有以下正则表达式。

String patternStr = "(?i)\\b"+Pattern.quote("$SE")+"\\b"; 

但它会为所有句子返回FALSE

请帮忙。

+0

显示你的代码,否则,我们无法看到你在做什么错。而且,你的要求不够清楚。 “ab $ SE foo”应该是“true”还是“false”? – jlordo

+1

请准确定义您想要考虑作为单词边界的内容。内置的'\ b'只适用于纯字母数字“单词”。 –

+0

在你的“单词”的*结尾*处是否会有非字母数字字符(如'$ SE $')? –

回答

2

你并不真正需要的单词边界为这一个。

我认为最简单的办法就是再次使用非词,“$ SE”和无字的序列。

例如:

String first = "$SEBGI is there"; 
String second = "there is $SE."; 
String third = "there is SE again"; 
Pattern pattern = Pattern.compile("\\W\\$SE\\W", Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher(first); 
System.out.println(matcher.find()); 
matcher = pattern.matcher(second); 
System.out.println(matcher.find()); 
matcher = pattern.matcher(third); 
System.out.println(matcher.find()); 

输出:

false 
true 
false 

注:

  • 我还没有使用Pattern.quote,因为它只是一个 “有问题” 的字符($)所以我只是逃脱了。
  • 我没有使用过的样子,屁股或查找aheads因为他们不是真正需要在这种情况下。
  • 我没有使用分组你不是试图检索任何东西,只检查String包含匹配Pattern的。
  • 你似乎需要它( - 同样的事情看你(?i)标志)我已经使用了Pattern.CASE_INSENSITIVE标志。
+0

谢谢梅纳它为这种情况工作。我已更新我的问题并添加了详细信息。你能请审查和指导我。 –

+0

@AnkurRaiyani这是** **不怎么这么工作。你的新问题看起来不错,但你不能从根本上改变原来的问题,并期望回答问题的人也能更新他们的答案。我想你应该回到你以前的问题,如果有必要的话把它关闭(或者标记为“已回答”),然后再问一个新问题,这样每个人都有机会公平而清楚地回答这个新问题。 – Mena

+0

好吧,我已经标记你的答案,并将创建新的问题 –

0

用途:

String example = "the charseq test"; 
String pattern = "(?i).*(^|\\s)" + Pattern.quote("charseq") + "($|\\s).*"; 
boolean matches = example.matches(pattern); 
0

您可以随时使用4个不同的表情:

boolean str_beg = Pattern.matches("^\\$SE\\s", <input_str>); 
boolean str_mid = Pattern.matches("\\s\\$SE\\s", <input_str>); 
boolean str_end = Pattern.matches("\\s\\$SE$", <input_str>); 
boolean str_all = Pattern.matches("^\\$SE$", <input_str>); 
boolean matches = str_beg || str_mid || str_end || str_all;