2015-10-15 125 views
1

我想創建一個不區分大小寫的前綴的正則表達式。我有以下的,但我不知道這是否是正確與否:正則表達式,不區分大小寫前綴

String value1 = "97 ebt ue i ua so sufi iqc k"; 
String pattern1 = "(?=(\\b(?i:.*s.*)))(?=(\\b(?i:.*q.*)))"; 

在我的例子,我試圖找到pattern1比賽中value1。據我的理解:

  1. \\b任何文字字符串中匹配
  2. :.*.*使不區分大小寫

這適用於某些情況下,但與其他人失敗。我無法弄清楚這個問題。

UPDATE:

此情況下,這裏將返回true,但它應該返回false。問題是應該有任何以s結尾的單詞和以q結尾的另一個單詞,因爲任何單詞都沒有結束,所以它應該失敗。

+0

您要查找的輸出是什麼? '\\ b'只是一個單詞邊界,它不匹配一個單詞。 '(?i)'只能在開始時使用一次,整個模式將不區分大小寫。 –

+1

它與哪些情況一起工作並且不合格。你能舉一些例子嗎? – Siddhartha

+0

我已更新我的問題 – omarsafwany

回答

1

\\b構造只是一個詞邊界,它不匹配一個詞。

(?i)只能在開始時使用一次,整個模式將不區分大小寫。

的事情是應該有與s結尾的單詞,另一個與q結束,因此因爲沒有與其中任何一個結束,因此應該失敗

使用

(?Ui)^(?=.*s\\b)(?=.*q\\b) 

在這裏,我們有兩個錨定前瞻,需要在輸入字符串(不區分大小寫)內輸入2個以qs結尾的單詞。

這裏是code demo

String value1 = "97 ebts ue i ua so sufi iqc k"; 
String pattern1 = "(?Ui)^(?=.*s\\b)(?=.*q\\b)"; 
Pattern ptrn = Pattern.compile(pattern1); 
Matcher matcher = ptrn.matcher(value1); 
if (matcher.find()) 
    System.out.println("true"); 
else 
    System.out.println("false"); 

如果你想知道什麼?U意味着它僅僅是「固定」的Unicode字符串中的\b字邊界。如果您不使用拉丁語以外的其他字母,則可以刪除U