我正在进行常规Expr的困难。我必须在字符串String str = "abc.123,a"
中找到123。我试过了
if(str1.matches("[\\s,.!]*123[\\s,.!]*"))
System.out.println("String " + str1 +" consist number " + searchNumber);
但它不起作用,但如果我有String str = .123,
则可行。
答案 0 :(得分:0)
如果您在正则表达式中使用Matcher#find()
,则会得到一个匹配项,因为find()
会搜索部分匹配项。但是,由于[\s,.!]*
匹配 0 或更多次出现,您的模式不符合您的我必须找到裸号(没有附近的字母)要求。
您可能对基于word boundary的解决方案感兴趣 - "\\b123\\b"
。见this demo。字边界匹配字母,数字和下划线之前/之后的位置。
如果您确实需要匹配不在字母之间的123
,请使用
String pat = "(?<!\\p{L})123(?!\\p{L})";
请参阅regex demo,其中
(?<!\p{L})
- (negative lookbehind)断言123
- 123
(?!\p{L})
- (negative lookahead)断言123
后没有字母。 然而,会在123
中找到01234
,所以我相信单词边界正则表达式是适合您的解决方案。
请参阅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");
}