Java 使用正则表达式替换单词中第一个不在单词开头的字符
例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati” 但是,使用此代码:Java 使用正则表达式替换单词中第一个不在单词开头的字符,java,regex,Java,Regex,例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati” 但是,使用此代码: str = str.replaceAll("(\\w+)i(.?)", "$1ee$2"); 我不断听到“初始”、“明矾”和“发光”,我不明白为什么。为什么? 因为默认情况下,\\w+中的+是贪婪的。在+(\\w+)之后添加不情愿的量词?,以进行尽可能短的匹配 让我们考虑这个例子, initial 正则表达式 (\\w+)i
str = str.replaceAll("(\\w+)i(.?)", "$1ee$2");
我不断听到“初始”、“明矾”和“发光”,我不明白为什么。为什么?
因为默认情况下,\\w+
中的+
是贪婪的。在+
(\\w+
)之后添加不情愿的量词?
,以进行尽可能短的匹配
让我们考虑这个例子,
initial
正则表达式
(\\w+)i(.?)
在上述
\w+
捕获到最后一个i
(不包括i
),因此组1将捕获init
。然后i
匹配t
之后的i
,然后捕获下一个字符,即a
到第2组(这是可选的)。因此,将匹配的字符替换为$1ee$2
将为您提供initeea
,而不匹配的l
将添加到最终结果中。使用以下模式
,初始单词字符使用不情愿的量词:
String[] input = {"initial", "alumni", "illuminati"};
for (String s: input) {
System.out.println(s.replaceAll("(\\w+?)i(.*)", "$1ee$2"));
}
输出
ineetial
alumnee
illumeenati