Java正则表达式截断字符串

ps0604

我有以下replaceAll带有正则表达式的Java字符串函数,该正则表达式用format的零变量替换${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}”

为了使其变得不太贪婪,您应该添加一个?这样,它将变得很懒,直到}遇到第一个停止

如评论中所提到的,一种替代方法是[^}]*它匹配任何这不是 }(因为它是放置在一个字符类)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java正则表达式截断字符串

来自分类Dev

Java正则表达式匹配字符串

来自分类Dev

Java字符串与正则表达式的区别?

来自分类Dev

正则表达式以匹配Java字符串

来自分类Dev

Java字符串带正则表达式

来自分类Dev

Java字符串split()正则表达式

来自分类Dev

Java正则表达式验证字符串

来自分类Dev

Java正则表达式拆分字符串

来自分类Dev

与正则表达式匹配的Java字符串

来自分类Dev

字符串的Java正则表达式

来自分类Dev

Java正则表达式拆分字符串

来自分类Dev

Java字符串替换正则表达式

来自分类Dev

Java正则表达式拆分字符串

来自分类Dev

Java字符串split()正则表达式

来自分类Dev

请求Java正则表达式字符串

来自分类Dev

字符串中的Java正则表达式

来自分类Dev

等效的 java 正则表达式字符串

来自分类Dev

字符串模式的 Java 正则表达式

来自分类Dev

Python在正则表达式定义的索引处截断字符串

来自分类Dev

如何使用sed或正则表达式截断shell脚本中的字符串?

来自分类Dev

正则表达式截断长度限制最近的表达式/空间上的字符串

来自分类Dev

查找所有字符串的正则表达式是在Java中以$开头的正则表达式

来自分类Dev

使用Java正则表达式在字符串中间查找匹配的字符串

来自分类Dev

Java正则表达式从字符串中删除重复的子字符串

来自分类Dev

Java的正则表达式从字符串中提取数字和字符串

来自分类Dev

通过正则表达式从正则表达式添加字符串

来自分类Dev

正则表达式:为字符串编辑正则表达式

来自分类Dev

Python正则表达式用特殊字符截断字符串,并用一个前导空格

来自分类Dev

长字符串上的Java正则表达式(字符串缓冲区)

Related 相关文章

热门标签

归档