簡體   English   中英

Java Regex,空字符串要匹配

[英]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個替代方案:

  1. (^|([.!?:] ))[^!.?:]*?Hello.*?([!.?])
  2. $

因此,問題在於您一直在循​​環中匹配字符串的結尾。

進行以下更改:

String regex = "(^|[.!?:] )" + "[^!.?:]*?" + queryStr + ".*?" + "([!.?]+?|$)";

現在,它看起來像

(^|[.!?:] )[^!.?:]*?Hello.*?([!.?]+?|$)

$將替代[!.?]+? 只要。

在此處輸入圖片說明

請參閱regex101.com上的演示

正則表達式的每個術語都是可選的。

為防止匹配空白輸入,請將其添加到正則表達式的前面:

(?!$)

這是一個向前看的斷言,斷言當前位置后面沒有輸入結束(即緊跟着“某物”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM