说我编译一个正则表达式模式:
String myString = "manifest";
p = Pattern.compile( myPattern, Pattern.CASE_INSENSITIVE );
Matcher m = p.matcher( myString );
if ( m.matches() ){
.....
}
例如,当我将myPattern
指定为ni
时,myString
无法匹配。但是当我将myPattern
指定为.*ni.*
时,它会匹配。
在我的代码的后半部分中,我将要用新模式替换myPattern
中定义的任何内容。例如,如果我将ni
指定为要替换的2个字符,那么它只会替换ni
。如果我指定.*ni.*
,则整个字符串将替换为新模式。现在我的问题是它没有匹配。
有什么可以解决这个问题? 感谢
答案 0 :(得分:4)
matches
尝试将整个输入与模式匹配(正如文档中所述),当然manifest
并非完全匹配ni
但与.*ni.*
完全匹配。但是,例如,如果您使用find
,它会在输入中 的某处搜索模式。还有lookingAt
,它试图匹配"当前"在输入中的位置。
答案 1 :(得分:3)
这完全取决于您使用的Matcher
方法:
示例:
String input = "manifest";
Matcher m1 = Pattern.compile("ni").matcher(input);
System.out.println(m1.matches()); // false
System.out.println(m1.find()); // true
Matcher m2 = Pattern.compile(".*ni.*").matcher(input);
System.out.println(m2.matches()); // true
System.out.println(m2.find()); // false
此外,find()允许您迭代匹配:
while (m2.find()) {
String groupX = m2.group(x);
}