[英]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.