为什么在包含零的字符串中没有&t; / 0 / g匹配?

时间:2015-02-11 13:14:25

标签: java regex

此代码最后总是返回“false”,即使Integer包含任何零:

Integer i = (int) rand(1, 200); // random [1;200)
String regexp = "/0/g";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(i.toString());

print(i);
print(m.matches());

是什么原因?我不知道错误可能在哪里。

需要:如果整数包含一个或多个零,则m.matches()=“true”。

4 个答案:

答案 0 :(得分:3)

问题是你正确地给出正则表达式。您提供的字符串Pattern.compile 只是表达式的文本,两边都没有/,没有标记;标志是单独指定的。

所以在你的情况下,你只想要:

String regexp = "0";

没有"全球"旗;相反,您可以根据您所做的事情使用生成的Matcher上的方法。

  

需要:m.matches()=" true"如果整数包含一个或多个零。

然后你不想使用Matcher#matches,你想要Match#find。或者,如果您需要使用Matcher#matches,则表达式为:

String regexp = ".*0.*";

......例如,任何数字的任何数字,然后是0,然后是任意数量的任何字符。这样,整个字符串就可以匹配表达式。


当然,如果您只是想知道零点,那么使用它会简单得多

boolean flag = String.valueOf(i).indexOf('0') != -1;

答案 1 :(得分:1)

在这种特殊情况下,由于您正在寻找文字字符,因此根本不需要正则表达式,请使用indexOf

if (Str.indexOf( '0' ) != -1) {
...

关于你的原始模式:

正则表达式不需要包含在Java中的分隔符之间,因此斜杠是无用的。全局修饰符也不需要,因为全局性质由您选择的方法决定。 (换句话说,获得多个结果的唯一方法是在循环中使用find方法来获得不同的结果)

答案 2 :(得分:0)

print(m.find());

匹配器将从头开始匹配。在您的情况下,使用find作为0输入是不可能的。

使用find可以让您在字符串中的任何位置找到0

matches尝试将表达式与整个字符串进行匹配,并在模式的开头和$处隐式添加^,这意味着它不会查找子字符串。因此false

同样根据其他答案的建议将正则表达式更改为"0"

答案 3 :(得分:0)

尝试,

String regexp = ".*0.*";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(i.toString());

if(m.find()){
    System.out.println(i);
    System.out.println(m.matches());
}

正则表达式:

enter image description here