2016-10-03 42 views
0

我有經常性Expr的diffuculties。我必須在字符串String str = "abc.123,a"中找到123。我試過 if(str1.matches("[\\s,.!]*123[\\s,.!]*")) System.out.println("String " + str1 +" consist number " + searchNumber); 但它不起作用,但如果我有String str = .123,它的作品。使用regEx查找字符串中的特殊號碼

+0

你什麼意思,你必須找到它?你需要索引?你需要知道它是否存在? – nhouser9

+0

試試這個:'str1.matches(「。* [\\ s,。!] 123 [\\ s,。!]。*」)' – Andreas

+0

@ nhouser9我必須找到它並且發送messege給用戶字符串 – Vladislav

回答

0

如果你用Matcher#find()與你的正則表達式,你會得到一個匹配,因爲find()搜索部分匹配。然而,由於[\s,.!]*匹配或更多發生,您的模式不符合您的我必須找到裸號(無信附近)要求。

你可能感興趣的基於word boundary的解決方案 - "\\b123\\b"。見this demo。字的邊界與字母,數字和下劃線之前/之後的位置相匹配。

如果你真的需要匹配123這不是字母之間,使用

String pat = "(?<!\\p{L})123(?!\\p{L})"; 

regex demo,其中

然而,即會發現在123,所以我相信一個字的邊界正則表達式是您正確的解決方案。

Java demo

String str = "abc.123,a"; 
Pattern ptrn = Pattern.compile("(?<!\\p{L})123(?!\\p{L})"); 
Matcher matcher = ptrn.matcher(str); 
if (matcher.find()) { 
    System.out.println("YES"); 
} 
相關問題