Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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,我试图使用模式对象用正则表达式替换字符串中的所有出现,但它只替换奇数出现: final Pattern p = Pattern.compile("(^|\\W|\\\\N)(recursive)(\\W|$)", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE); System.out.println(p.matcher("i-i-i").replaceAll("$1I$3")); 这让我想起: I-i-I 但是我需要把中间的I也匹配,但是不知

我试图使用
模式
对象用正则表达式替换字符串中的所有出现,但它只替换奇数出现:

final Pattern p = Pattern.compile("(^|\\W|\\\\N)(recursive)(\\W|$)", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("i-i-i").replaceAll("$1I$3"));
这让我想起:

I-i-I
但是我需要把中间的I也匹配,但是不知怎么回事。我还尝试了一个简化的regex
(^ |-)(I)($|-)
,并尝试对返回我的
I-I-I-I-I-I
执行相同的操作


我想这是因为奇数破折号(4x+1)已经匹配,所以偶数
I
s无法再次匹配。有可能允许这样吗?

您的问题似乎是您试图在少数匹配中使用相同的字符
-
。在这种情况下,您可能应该使用环视机制。例如,您可以更改您的

(^|-)(I)($|-) 
拍拍

(^|-)(I)(?=($|-)) 
作为替换,请使用
$1I
。这样,regex只会检查after
I
是否存在
$
-
但不会将其包含在匹配中,因此

final Pattern p = Pattern.compile("(^|-)(I)(?=($|-))",
        Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher("i-i-i-i-i-i").replaceAll("$1I"));
印刷品

I-I-I-I-I-I