我需要寻找"$SE"
关键字进行下列句子。java的正则表达式来找到确切的词有特殊字符
$SEBGI is there
there is $SE.
there is SE again
输出应该如下:
FALSE
TRUE
FALSE
我具有以下正则表达式。
String patternStr = "(?i)\\b"+Pattern.quote("$SE")+"\\b";
但它会为所有句子返回FALSE
。
请帮忙。
我需要寻找"$SE"
关键字进行下列句子。java的正则表达式来找到确切的词有特殊字符
$SEBGI is there
there is $SE.
there is SE again
输出应该如下:
FALSE
TRUE
FALSE
我具有以下正则表达式。
String patternStr = "(?i)\\b"+Pattern.quote("$SE")+"\\b";
但它会为所有句子返回FALSE
。
请帮忙。
你并不真正需要的单词边界为这一个。
我认为最简单的办法就是再次使用非词,“$ 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
,因为它只是一个 “有问题” 的字符($)所以我只是逃脱了。String
包含匹配Pattern
的。(?i)
标志)我已经使用了Pattern.CASE_INSENSITIVE
标志。谢谢梅纳它为这种情况工作。我已更新我的问题并添加了详细信息。你能请审查和指导我。 –
@AnkurRaiyani这是** **不怎么这么工作。你的新问题看起来不错,但你不能从根本上改变原来的问题,并期望回答问题的人也能更新他们的答案。我想你应该回到你以前的问题,如果有必要的话把它关闭(或者标记为“已回答”),然后再问一个新问题,这样每个人都有机会公平而清楚地回答这个新问题。 – Mena
好吧,我已经标记你的答案,并将创建新的问题 –
用途:
String example = "the charseq test";
String pattern = "(?i).*(^|\\s)" + Pattern.quote("charseq") + "($|\\s).*";
boolean matches = example.matches(pattern);
您可以随时使用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;
显示你的代码,否则,我们无法看到你在做什么错。而且,你的要求不够清楚。 “ab $ SE foo”应该是“true”还是“false”? – jlordo
请准确定义您想要考虑作为单词边界的内容。内置的'\ b'只适用于纯字母数字“单词”。 –
在你的“单词”的*结尾*处是否会有非字母数字字符(如'$ SE $')? –