2016-10-03 58 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"); 
}