2017-07-27 30 views
3

我盡力配合與Java 8正則表達式字符串構成任何語言比賽用java 8的正則表達式字符串構成任何語言

,只要它包含字母,數字和.-

String s = "בלה בלה"; 
String pattern= "^[\\p{L}\\p{Digit}_.-]*$"; 
return s.matches(pattern); 

我是什麼因爲此代碼爲希伯來語有效字符串返回null,因此缺少。

+0

等一下,你在字符串中有一個空格,但不是在模式中。嘗試'String pattern =「(?U)^ [\\ w。\\ s - ] * $」' –

+3

* *返回null?作爲'String#matches()'返回原始布爾值' – Lino

回答

4

您可以將空白添加到您的模式,並使用\w代替\p{L}\p{Digit}_在經過Pattern.UNICODE_CHARACTER_CLASS標誌:

String s = "בלה בלה"; 
String pattern= "(?U)[\\w\\s.-]*"; 
System.out.println(s.matches(pattern)); 
// => true 

Java demo

由於圖案內String#matches()使用的方法,該^$錨點是沒有必要的。如果您打算使用Pattern#find()方法使用該模式,請將模式與原始代碼("^(?U)[\\w\\s.-]*$")一樣放在錨點內。

圖案的詳細資料

  • (?U) - 在Pattern.UNICODE_CHARACTER_CLASS嵌入式修改標誌,使速記字符類支持Unicode(你可以看到在此模式下\w比賽)
  • [\\w\\s.-]* - 零個或多個:
    • \w - 字詞(字母,數字,_等等)
    • \s - 空格
    • . - 點(不需要轉義字符類的內部)
    • - - 連字符(沒有必要,因爲它是在字符類的末尾)
+0

優秀!我絕對不知道你可以打開java正則表達式的Unicode搜索。謝謝你 – Eugene

+0

我是否錯過了一些東西,還是應該'.'不會像'\\。'那樣逃脫? – Lino

+0

@Lino不,不應該。 –