Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java模式匹配器行为_Java_Regex - Fatal编程技术网

Java模式匹配器行为

Java模式匹配器行为,java,regex,Java,Regex,假设我编译一个正则表达式模式: String myString = "manifest"; p = Pattern.compile( myPattern, Pattern.CASE_INSENSITIVE ); Matcher m = p.matcher( myString ); if ( m.matches() ){ ..... } 例如,当我将myPattern指定为ni时,myString不匹配。但当我将myPattern指定为*ni.*时,它就会匹配 在代码的后面部

假设我编译一个正则表达式模式:

 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
作为要替换的两个字符,那么它将只替换
ni
。如果指定
*ni.*
,则整个字符串将替换为新模式。现在我的问题是它不匹配

解决这个问题的办法是什么?
感谢尝试根据模式匹配整个输入(如文档中所述),当然
manifest
不是
ni
的精确匹配,而是
*ni.
的精确匹配。但如果使用,例如,它将在输入中的某个位置搜索模式。还有一个匹配器,它尝试在输入中的“当前”位置匹配模式。

这完全取决于您使用的
匹配器
方法:

  • matches():当且仅当整个区域序列与此匹配器的模式匹配时为true
  • find():当且仅当输入序列的子序列与此匹配器的模式匹配时,为true
例如:

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);
}

直接使用。替换?您如何使用
m
?您好,谢谢,我使用了
匹配项。所以我应该使用
查找
…我会尝试一下。谢谢