这是关于编写正则表达式以满足给定条件。
条件是:
在下面的代码中,我正在寻找一个单词Positive。我在正则表达式中硬编码了字符串。理想情况下,在这种情况下,输出应为false,但它返回true。 所以我不知道该怎么做。
String inputStr = "ssdf Positiveasd asd sdfewrewr asd";
inputStr = inputStr.toUpperCase();
String patternStr = "[^a-z]*[\\s]?[^\\d\\w]?[POSITIVE\b]+[^a-z]*";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
System.out.println(matchFound);
答案 0 :(得分:1)
你的一个问题是\b
表示“退格符”(显然不存在于你想要匹配的字符串中)。
你想要\\b
(正则表达式引擎在字符串处理完成后会收到\b
(字边界))。不要忘记您需要在Java字符串中转义反斜杠。
答案 1 :(得分:1)
(\bPOSITIVE\b)
应该做的伎俩(说我的酷正则表达式调试器)。方括号定义字符类和圆括号模式(不要忘记在java字符串文字中加倍\)
答案 2 :(得分:1)
您需要双重转义,因此\b
应该成为\\b
不要将“POSITIVE”放入方括号中,这会创建一个字符类,意味着匹配任何包含的字符。
将[POSITIVE\b]+
替换为POSITIVE\b
当我正确理解您的要求时,您应该只需要(?i)\\bpositive\\b
(?i)
使您的inputStr.toUpperCase()
不必要,因为它会使匹配案例独立。 \\b
是一个单词边界意味着如果之前没有单词字符,并且单词“positive”后面没有单词字符,则为真。
测试代码
String s1 = "ssdf Positiveasd asd sdfewrewr asd";
String s2 = "ssdf Positive asd asd sdfewrewr asd";
String s3 = "ssdf poSiTive asd sdfewrewr asd";
String s4 = "ssdf FooPositive asd sdfewrewr asd";
String[] s = { s1, s2, s3, s4 };
String regex = "(?i)\\bpositive\\b";
for(String a : s) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(a);
if (matcher.find())
System.out.println(a + " ==> Success");
else
System.out.println(a + " ==> Failure");
}
<强>输出强>
ssdf positiveasd asd sdfewrewr asd ==&gt;故障
ssdf积极的asd asd sdfewrewr asd ==&gt;成功
ssdf poSiTive asd sdfewrewr asd ==&gt;成功
ssdf FooPositive asd sdfewrewr asd ==&gt;失败
答案 3 :(得分:1)
如果我理解你,你想要匹配像
这样的东西Positive; blah
Positive blah
blah Positive blah
但不是你的示例字符串或
之类的东西Positive;; blah
;Positive
是吗?如果是这样,我觉得你的表情过于复杂......
这样的事情怎么样?
String patternStr = "[^\\s]+POSITIVE[\\b]?[$\\s]*";
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();
另外,您可能希望确保“特殊字符”的定义与\ b字边界的定义相同。
答案 4 :(得分:0)
尝试删除边界\b
,并查看它是否返回true。
答案 5 :(得分:0)
执行以下操作可能更简单:
public boolean doesInputContainWord(String inputStr, String word) {
inputStr = inputStr.toLowerCase().replaceAll("[^a-z]", " ");
word = " " + word.toLowerCase() + " ";
return inputStr.contains(word);
}
这将替换输入字符串中不是带空格的字母的每个字符,然后检查转换文本是否包含word
。请注意,这是<space> + <word> + <space>
。
或者,如果您真的想使用正则表达式进行匹配,那么我建议删除“{1}}周围的”{1}},以及[]
和\b
之后。括号是定义一个字符类,在这种情况下不是你想要的。您想要查找文字文本“POSITIVE”。 +
将匹配“OOST”和“VIVE”之类的内容以及包含“Positive”一词中的一个或多个字母的任何字符串。
答案 6 :(得分:-1)
您也可以使用
if(inputStr.indexOf("Positive") > 0){
//Word is found
}