[英]Java Regex,Empty String be matched
我用Java写了一个正则表达式来匹配包含以下字符串的句子:
String regex = "((^|([.!?:] ))" + "[^!.?:]*?" + queryStr + ".*?" + "([!.?])|$)+?";
然后,我使用正则表达式来匹配我的String,如下所示:
Pattern pattern = Pattern.compile(regex);
String content = "Hello World!!!";
Matcher match = pattern.matcher(content);
int index = 0;
while(match.find(index))
{
index = match.end() -1;
System.out.println(match.group());
}
但是我怀疑循环永远不会结束,因为正则表达式匹配空字符串。 显然,我的正则表达式包含字符串queryStr。 所以,我对此感到困惑。 谁能帮助我解决这个问题?
您的正则表达式模式看起来像
((^|([.!?:] ))[^!.?:]*?Hello.*?([!.?])|$)+?
它包含2个替代方案:
(^|([.!?:] ))[^!.?:]*?Hello.*?([!.?])
$
因此,问题在于您一直在循环中匹配字符串的结尾。
进行以下更改:
String regex = "(^|[.!?:] )" + "[^!.?:]*?" + queryStr + ".*?" + "([!.?]+?|$)";
现在,它看起来像
(^|[.!?:] )[^!.?:]*?Hello.*?([!.?]+?|$)
$
将替代[!.?]+?
只要。
请参阅regex101.com上的演示 。
正则表达式的每个术语都是可选的。
为防止匹配空白输入,请将其添加到正则表达式的前面:
(?!$)
这是一个向前看的断言,断言当前位置后面没有输入结束(即紧跟着“某物”)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.