1

我正在尝试应用以下模式:

Pattern p = Pattern.compile(".*?");
Matcher m = p.matcher("RAJ");
StringBuffer sb = new StringBufffer();
while(m.find()) {
 m.appendReplacement(sb, "L");
}
m.appendTail(sb);

预期输出:LLL 实际输出:LRLALJL

上述正则表达式中的 Dot(.) 是否匹配字符之间的位置?如果不是,为什么会收到上述输出

4

4 回答 4

5

匹配任意数量的.*?字符,但尽可能少地匹配整个正则表达式(?使得* 不情愿(也称为惰性))。由于在正则表达式之后没有任何内容,因此它将始终匹配空字符串(也就是字符之间的位置)。

如果您希望至少匹配一个字符,请尝试.+?. 请注意,这与正. 表达式中没有其他内容相同。

于 2012-09-05T07:07:09.010 回答
3

你可以这样做:

String s = "RAJ";
s = s.replaceAll(".","L");                                                                                                                                                                                  
System.out.println(s);

您可以使用 Matcher 和 find 方法来完成,但 replaceAll 接受正则表达式。

于 2012-09-05T07:10:50.207 回答
2

不是.字符之间的匹配,而是*意味着0或更多,并且?意味着尽可能少。
因此,“零个或多个事物,并且尽可能少”将始终匹配零个事物,因为这是可能的最少的事物,如果它后面没有表达式正在寻找的其他事物。

.{1}将导致输出,LLL因为它匹配任何一次。

于 2012-09-05T07:09:37.477 回答
1

*则表达式中的.*?表示没有或更多重复。如果您想匹配至少一个字符,请使用 regex .+?

于 2012-09-05T07:10:45.087 回答