2017-05-10 42 views
1

對於正則表達式並不熟悉,並使用以下代碼來查找單詞是否在結尾/開始處包含特殊字符。如何查找和跳過單詞開頭和結尾的特殊字符

String s = "K-factor:"; 
     String regExp = "^[^<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[0-9_+]*$"; 
     Matcher matcher = Pattern.compile(regExp).matcher(s); 
     while (matcher.find()) { 
      System.out.println("Start: "+ matcher.start()); 
      System.out.println("End: "+ matcher.end()); 
      System.out.println("Group: "+ matcher.group()); 
      s = s.substring(0, matcher.start()); 
     } 

想要在字符串的開始或結束處查找是否有任何特殊字符(:在此示例代碼中)。試圖跳過角色。 既不編譯時間錯誤也不輸出。

+0

如果在開始和結束時有字母以外的其他字符,您想匹配嗎?然後使用'「^ \\ P {L} | \\ P {L} $」'。你的正則表達式與'K因子'不匹配,因爲它最後包含':'。 –

+0

Thanks @WiktorStribiżew工作得很好。請張貼答案,以便其他人可以參考。 – srikanth

回答

1

請注意,您的正則表達式匹配整個字符串,該字符串不包含您在字符類中定義的字符。有問題的字符串與該模式不匹配,因爲它包含:

你可能會考慮拆分模式分爲兩個部分使用交替組檢查在開始或結束不必要的字符:

String regExp = "^[<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[0-9_+]|[<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[0-9_+]$"; 

這裏,圖案具有^<special_char_class>|<special_char_class>$結構,^錨的比賽在開始,$在字符串結尾處錨定匹配,並且|是交替運算符。注意我從字符類的開頭刪除了^,使它們成爲正數而不是否定,以便它們可以匹配類中定義的那些字符/範圍。

或者,因爲你似乎如果它包含在開始/結束一個非字母只匹配字符串,你可以使用

String regExp = "^\\P{L}|\\P{L}$"; 

這是Unicode字母知道或者 - 只有ASCII:

String regExp = "^\\P{Alpha}|\\P{Alpha}$"; 
相關問題