java替换使用正则表达式的单词中第一个不在单词开头的字符
例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati”
但是,使用此代码:
str = str.replaceAll("(\\w+)i(.?)", "$1ee$2");
我不断地听到“初始”、“明矾”和“发光”,我不明白为什么
你可以在下面搜索框中键入要查询的问题!
例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati”
但是,使用此代码:
str = str.replaceAll("(\\w+)i(.?)", "$1ee$2");
我不断地听到“初始”、“明矾”和“发光”,我不明白为什么
# 1 楼答案
为什么强>
因为
\\w+
中的+
在默认情况下是贪婪的。在+
(\\w+
)之后添加不情愿的量词?
,以进行尽可能短的匹配让我们考虑这个例子,
正则表达式
在上面的
\w+
捕获到最后的i
(不包括i
)中,因此init
将被组1捕获。然后i
匹配t
后面的i
,然后它将下一个字符捕获到组2中(这是可选的)。因此,用$1ee$2
替换匹配的字符将得到initeea
,而不匹配的l
将添加到最终结果中# 2 楼答案
使用以下
Pattern
,并使用不情愿的量词作为初始单词字符:输出