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只会检查afterI
是否存在$
或-
但不会将其包含在匹配中,因此
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