提问人:Nakilon 提问时间:8/17/2023 更新时间:8/17/2023 访问量:62
每三位数字有空格的整数的正则表达式会抛出“永无止境的递归”
Regex for integer with spaces every three digits throws "never ending recursion"
问:
我想验证字符串是否为未定义长度的这种格式的整数。
/\A (?<d> ( ( (\g<d>[[:space:]])? \d)? \d)? \d) \z/x === "12 123 123"
但它抛出了
SyntaxError: never ending recursion
答:
1赞
Wiktor Stribiżew
8/17/2023
#1
看来你可以使用
/\A\d{1,3}(?: \d{3})*\z/
或者,要支持任何类型的空格:
/\A\d{1,3}(?:[[:space:]]\d{3})*\z/
/\A\d{1,3}(?:\p{Z}\d{3})*\z/
细节:
\A
- 字符串的开头\d{1,3}
- 一位、两位或三位数字(?:[[:space:]]\d{3})*
- 零次或多次出现空格,然后是三位数字\z
- 字符串末尾。
请参阅 Rubular 演示。
另外,请参阅检查字符串是否与 ruby 中的正则表达式匹配的最快方法?如何检查字符串是否与 Ruby 中的正则表达式匹配。简而言之,它是.your_pattern.match?(your_string)
评论
/\A\d{1,3}(?: \d{3})*\z/
===
=~
\A(?<d>\g<d>)\z