[英]Java regular expression truncates string
我有以下带有正则表达式的Java字符串replaceAll
函数,该正则表达式将零变量替换为${var}
格式:
String s = "( 200828.22 +400000.00 ) / ( 2.00 + ${16!*!8!1} ) + 200828.22 + ${16!*!8!0}";
s = s.replaceAll("\\$\\{.*\\}", "0");
问题在于结果字符串s
为:
"( 200828.22 +400000.00 ) / ( 2.00 + 0"
此代码有什么问题?
将您的正则表达式更改为
\\$\\{.*?\\}
↑
*
是贪婪的 ,引擎会重复它多次,因此它匹配{
,然后匹配所有内容,直到最后一个标记。 然后,它开始回溯,直到与}
之前的最后一个字符匹配。
例如,如果您有正则表达式
\\{.*\\}
和字符串
"{this is} a {test} string"
匹配如下:
{
与第一个{
.*
匹配所有内容,直到g
令牌 }
t
,然后可以匹配下一个}
从而匹配“ {this is} a {test}” 为了使其变得不贪心,您应该添加一个?
。 这样,它将变得很懒,直到遇到第一个}
为止。
如评论中所述,替代方法是[^}]*
。 它与任何非 }
匹配(因为它已放置在字符类中 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.