Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati” 但是,使用此代码: str = str.replaceAll("(\\w+)i(.?)", "$1ee$2"); 我不断听到“初始”、“明矾”和“发光”,我不明白为什么。为什么? 因为默认情况下,\\w+中的+是贪婪的。在+(\\w+)之后添加不情愿的量词?,以进行尽可能短的匹配 让我们考虑这个例子, initial 正则表达式 (\\w+)i

例如: “initial”应返回“ineetial”,“alumne”应返回“alumne”,而“illumati”应返回“illumeenati”

但是,使用此代码:

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