Java正则表达式行为

Java正则表达式行为,java,regex,Java,Regex,我尝试应用以下模式: Pattern p = Pattern.compile(".*?"); Matcher m = p.matcher("RAJ"); StringBuffer sb = new StringBufffer(); while(m.find()) { m.appendReplacement(sb, "L"); } m.appendTail(sb); 预期产出:微升 实际输出:LRLALJL 这是圆点。在上面的正则表达式中,字符之间的位置是否匹配?如果没有,为什么会收到上述输出

我尝试应用以下模式:

Pattern p = Pattern.compile(".*?");
Matcher m = p.matcher("RAJ");
StringBuffer sb = new StringBufffer();
while(m.find()) {
 m.appendReplacement(sb, "L");
}
m.appendTail(sb);
预期产出:微升 实际输出:LRLALJL

这是圆点。在上面的正则表达式中,字符之间的位置是否匹配?如果没有,为什么会收到上述输出?匹配任意数量的字符,但尽可能少地匹配整个正则表达式?使*也被称为懒惰。因为在正则表达式中没有后面的内容,所以它将始终匹配空字符串a.k.a字符之间的位置

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

?匹配任意数量的字符,但尽可能少地匹配整个正则表达式?使*也被称为懒惰。因为在正则表达式中没有后面的内容,所以它将始终匹配空字符串a.k.a字符之间的位置

如果您希望至少匹配一个字符,请尝试+?。请注意,这与刚才的相同。如果在正则表达式中没有其他内容,则不是这样。字符之间匹配,但那*表示0或更多,而?意味着尽可能少。 所以零个或更多的东西,并且尽可能少的东西总是匹配零个东西,因为这是尽可能少的,如果它后面没有表达式所寻找的其他东西

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

并非如此。字符之间匹配,但那*表示0或更多,而?意味着尽可能少。 所以零个或更多的东西,并且尽可能少的东西总是匹配零个东西,因为这是尽可能少的,如果它后面没有表达式所寻找的其他东西


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

正则表达式中的*?表示不重复或多次重复。如果您希望至少匹配一个字符,请使用正则表达式中的“+?”

正则表达式中的“*”?表示不重复或多次重复。如果您希望至少匹配一个字符,请使用正则表达式+?。

您可以通过以下方式获得它:

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

您可以使用Matcher and find方法执行此操作,但replaceAll接受正则表达式。

您可以让它执行以下操作:

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

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

。单独匹配一次或更精确,它将只消耗一个字符。{1}伪量词没有效果。单独匹配一次或更精确,它将只消耗一个字符。{1}伪量词没有效果。+1是迄今为止唯一正确的解决方案,尽管@Joachim确实指出了这一点。+?实际上与相同。是的,在String类以及Matcher中找到的replaceAll与问题中的代码做了相同的事情。谢谢,这是一种更简单的方法。+1是迄今为止唯一正确的解决方案,尽管@Joachim确实指出了这一点。+?实际上与相同。是的,在String类以及Matcher中找到的replaceAll与问题中的代码做了相同的事情。谢谢,这是一种更简单的方法。+1,但我要强调的是,不情愿与贪婪不是问题的根源,它只会使症状更有趣。:P如果你要换新衣服?一个贪婪的人。*你会得到LL,贪婪的人会给你简单的L。正如你所指出的,。+?产生正确的输出,但这仅仅是因为它的行为像。。真正的解决办法是去掉量词,正如@rmunoz所证明的那样。+1,但我要强调的是,不情愿与贪婪并不是问题的根源,它只是让症状变得更有趣P如果你要换新衣服?一个贪婪的人。*你会得到LL,贪婪的人会给你简单的L。正如你所指出的,。+?产生正确的输出,但这仅仅是因为它的行为像。。真正的解决办法是去掉量词,如@rmunoz所示。