[英]Composing an regular expression in java
这是关于组成正则表达式以满足给定条件。
条件是:
在下面的代码中,我正在搜索正词。 我已经在正则表达式中对字符串进行了硬编码。 理想情况下,在这种情况下,输出应为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);
您的问题之一是\\b
表示“退格字符”(显然,您要匹配的字符串中不存在该字符)。
您需要\\\\b
(在完成字符串处理后,regex引擎将其接收为\\b
(单词边界))。 不要忘记,您需要在Java字符串中转义反斜杠。
但是,我会以不同的方式构造正则表达式。 但是,我不明白您的要求不是什么意思。 3.您能否提供一些示例来说明这一点?
(\bPOSITIVE\b)
应该可以解决问题(我很酷的正则表达式调试器说)。 方括号定义字符类,圆括号定义模式(不要忘记在Java字符串文字中加倍\\)
您需要两次转义,因此\\b
应该变成\\\\b
不要将“正”放在方括号中,这会创建一个字符类,表示匹配任何包含的字符。
将[POSITIVE\\b]+
替换为POSITIVE\\b
当我正确理解您的要求时,您只需要(?i)\\\\bpositive\\\\b
(?i)
使您的inputStr.toUpperCase()
(?i)
变得不必要,因为它使区分大小写无关。 \\\\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 ==>失败
ssdf正asd asd sdfewrewr asd ==>成功
ssdf积极性asd sdfewrewr asd ==>成功
ssdf FooPositive asd sdfewrewr asd ==>失败
如果我了解您,您想匹配以下内容
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字边界的含义相同。
尝试删除边界\\b
一词,看看它是否返回true。
进行以下操作可能会更简单:
public boolean doesInputContainWord(String inputStr, String word) {
inputStr = inputStr.toLowerCase().replaceAll("[^a-z]", " ");
word = " " + word.toLowerCase() + " ";
return inputStr.contains(word);
}
这会将输入字符串中不是字母的每个字符替换为空格,然后检查转换文本是否包含word
。 请注意,这是<space> + <word> + <space>
。
或者,如果您真的想使用正则表达式进行匹配,则建议删除“正”周围的[]
,以及后面的\\b
和+
。 方括号定义了一个字符类,在这种情况下,这不是您想要的。 您要查找文字文本“ POSITIVE”。 [POSITIVE]+
可以匹配“ OOST”和“ VIVE”之类的东西,几乎可以匹配包含一个或多个单词“ Positive”的字母的字符串。
您也可以使用
if(inputStr.indexOf("Positive") > 0){
//Word is found
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.