为什么/ 0/g在包含零的字符串中匹配?
该代码总是返回最后“假”,即使整数包含任何零:为什么/ 0/g在包含零的字符串中匹配?
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”如果Integer包含一个或多个零。作为0
输入你的情况是不可能的
问题是你正确地给正则表达式。您给Pattern.compile
的字符串是只是表达式的文本,两边都没有/
,也没有标志;标志是分开指定的。
所以,你只是想:
String regexp = "0";
有没有 “全局” 标志;相反,您可以根据您所做的工作适当使用生成的Matcher
上的方法。
需要:m.matches()=“true”如果Integer包含一个或多个零。
然后你不想用Matcher#matches
,你想要Match#find
。或者,如果你需要使用Matcher#matches
,表达的是:
String regexp = ".*0.*";
... e.g,任意数量的任意字符,然后是0,那么任何数目的字符。这样,整个字符串可以匹配表达式。
当然,如果你只是想知道有一个零,这是更简单,只需使用
boolean flag = String.valueOf(i).indexOf('0') != -1;
print(m.find());
匹配器将从beginning.Use find
匹配。
使用find将使您能够在字符串中的任意位置找到0
。
matches
尝试将表达式与整个字符串进行匹配,并在模式的开始和$末尾隐式添加^,这意味着它不会查找子字符串。因此false
。
还可以根据其他答案的建议将您的正则表达式更改为"0"
。
为什么downvoted ?????? // – vks 2015-02-11 13:19:52
不是我,而是简单地改成'find'不会解决问题。 *'字符串regexp =“/ 0/g”;'* – johnchen902 2015-02-11 13:22:37
@ johnchen902是的,没错。 – vks 2015-02-11 13:22:58
在这种特殊情况下,你并不需要一个正则表达式,因为在所有你正在寻找对于文字字符,请使用indexOf
:
if (Str.indexOf('0') != -1) {
...
你的原有格局:
正则表达式不需要被包含在Java中的分隔符之间,所以斜线无用。全局修饰符也不需要,因为全局性质取决于您选择的方法。(换句话说,为了获得几个结果的唯一方法是使用find
方法在一个循环中,以获得不同的结果)
尝试,
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());
}
正则表达式:
对不起语法 – 2015-02-11 13:15:04
什么是/ g? .... – 2015-02-11 13:15:34
嗯,你的正则表达式正在寻找斜线和'g'字符......你期望那些来自哪里? – 2015-02-11 13:15:47