Techioz Blog

3 桁ごとにスペースを含む整数の正規表現は「終わりのない再帰」をスローします

概要

文字列がそのような形式の不定長の整数であることを検証したいと考えています。

/\A (?<d> ( ( (\g<d>[[:space:]])? \d)? \d)? \d) \z/x === "12 123 123"

しかし、それは投げます

SyntaxError: never ending recursion

解決策

使えるみたいですよ

/\A\d{1,3}(?: \d{3})*\z/

または、あらゆる種類の空白をサポートするには、次のようにします。

/\A\d{1,3}(?:[[:space:]]\d{3})*\z/
/\A\d{1,3}(?:\p{Z}\d{3})*\z/

詳細:

Rubular のデモをご覧ください。

また、文字列が Ruby の正規表現に一致するかどうかを確認する最速の方法も参照してください。 Ruby で文字列が正規表現に一致するかどうかを確認する方法。つまり、your_pattern.match?(your_string) です。