gpt4 book ai didi

java - 此正则表达式行超出了我的理解 "(?=(?:\d{3})++(?!\d))"

转载 作者:行者123 更新时间:2023-12-04 20:46:15 25 4
gpt4 key购买 nike

我对基本的正则表达式很满意。但是这行用于大量分离千位的代码超出了我的知识范围,谷歌搜索了很多也不能满足我的好奇心。你们谁能花点时间向我解释一下下面这行代码吗?

someString.replaceAll("(\\G-?\\d{1,3})(?=(?:\\d{3})++(?!\\d))", "$1,");

我特别不理解正则表达式结构 "(?=(?:\d{3})++(?!\d))"

非常感谢。

最佳答案

"(?=(?:\d{3})++(?!\d))"lookahead assertion .

意思是“仅当后面跟着((我们不需要捕获的三个数字)重复一次或多次(并再次重复一次或多次)(后面没有数字))时才匹配” 。看这个explanation关于 (?:...) 符号。它称为非捕获组,意味着您不需要在匹配后引用该组。

"(\\G-?\\d{1,3})" 是实际应该匹配的部分(但前提是满足上述条件)。

编辑:我认为 + 必须是一个特殊字符,否则它只是一个加号。如果它是一个特殊字符(并且快速搜索建议 it is in Java, too ),则第二个是多余的。

编辑 2:感谢 Alan Moore ,现在很清楚了。第二个+表示所有格匹配,意思是如果尽可能多的检查3位数字组后没有发现后面没有非数字,引擎会立即放弃而不是后退一个 3 位数的小组。

关于java - 此正则表达式行超出了我的理解 "(?=(?:\d{3})++(?!\d))",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com