[英]?= and \\1 in Ruby regular-expression pattern matching
在寻找一种在Ruby中将逗号添加到大整数的方法(例如,将1000000
更改为1,000,000
)时,我遇到了以下方法:
.to_s.reverse.gsub(/(\\d{3})(?=\\d)/, '\\\\1,').reverse
它按预期工作,但我不明白(?=\\d)
和\\\\1
的第一个\\
是做什么的。 当我从方法中删除它们时,即:
.to_s.reverse.gsub(/(\\d{3})/, '\\1,').reverse
该方法仍然有效。 如果这些都是不必要的,为什么要在里面呢?
正如您正确观察到的,反斜杠是多余的。 您找到的代码不是一个好代码。 您可以删除它。 但是请确保使用单引号: '\\1'
。 请注意,解析器不会将此转义解释为转义。 它遵循gsub
的特殊语法。
(?=\\d)
确保插入逗号的目标位置之后(在原始字符串之前)是另一个数字,以使100000
不会成为",100,000"
; 您想要"100,000"
。
顺便说一句,正如我已经说过的那样,您发现的代码很糟糕。 通常,它是这样完成的:
to_s.gsub(/(?<=\d)(?=(?:\d{3})+\z)/, ",")
在这里, (?<=\\d)
(?=\\d)
在代码中的作用与(?=\\d)
相同。
对于其他的方式来做到这一点,看到的底部此 。
(?=\\d)
是正向超前的语法。 如果要匹配某些内容,然后再匹配其他内容,则积极的前瞻不可或缺。 在这种情况下,您要匹配3位数字,然后再匹配另一位数字,以便可以插入逗号。 \\ 1中的第一个\\只是转义了第二个斜杠,因此您留下的是“ \\ 1”,这是第一个替换组的语法,在这种情况下为d {3},因此它将d {3}替换为d {3 }.。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.