正規表現の\dが全角数字にマッチするプログラミング言語
このページは、正規表現の \d
が全角数字にマッチするプログラミング言語について調査した結果をまとめる予定のページです。
目次
注意
- 記載しているのは現状一部のプログラミング言語のみです。(今後増えるかもしれません)
- ここでの「半角数字」「全角数字」は下記の意味です。
- 「半角数字」 = U+0030 DIGIT ZERO (0)~U+0039 DIGIT NINE (9)
- 「全角数字」 = U+FF10 FULLWIDTH DIGIT ZERO (0)~U+FF19 FULLWIDTH DIGIT NINE (9)
まとめ
言語 | デフォルトで\dが全角数字にマッチするか | オプションなどの影響で\dの挙動が変わるか |
---|---|---|
C# (.NET) | ○ | ○ (RegexOptions.ECMAScript で半角数字のみにマッチ) |
Java | - | ○ ((?U) で全角数字にもマッチ) |
JavaScript | - | - |
Perl | - | ○ (utf8フラグ付き文字列の場合全角数字にもマッチ) |
PHP | - | ○ (u 修飾子で全角数字にもマッチ) |
Python | ○ | ○ ((?a) , re.ASCII で半角数字のみにマッチ) |
Ruby | - | ○ ((?u) で全角数字にもマッチ) |
Go | - | - |
Swift (NSRegularExpression) |
○ | - |
MySQL (8.0.4~) | ○ | - |
MariaDB | ○ | - |
PostgreSQL | - | - |
- 明確に半角数字の0~9にのみマッチさせたい場合は、
\d
ではなく[0-9]
と書いたほうが問題が発生する可能性が低くなります。- ICU (International Components for Unicode) のRegular Expressionsで定義されている
\d
の定義が「Match any character with the Unicode General Category of Nd (Number, Decimal Digit.)」(Unicode一般カテゴリがNd(Number, Decimal Digit)である任意の文字にマッチします) になっており、それに準拠していたり参照している実装があります。UnicodeのNdには全角数字以外にも様々な文字が含まれています。
- ICU (International Components for Unicode) のRegular Expressionsで定義されている
各言語のサンプルコード
C#
Java
JavaScript
- 参考
- 補足
- 古いFirefoxでは
\d
が全角数字にマッチしていました。(JavaScriptの正規表現で、メタ文字の"\s","\d"はクロスブラウザでの互換性が無い。(追記@2007/11/29) - Enjoy*Study)
- 古いFirefoxでは
Perl
PHP
Python
Ruby
Go
Swift
- 参考
- NSRegularExpression | Apple Developer Documentation
- ICU準拠と記載あり (
NSRegularExpression conforms to the International Components for Unicode (ICU) specification for regular expressions.
)
- ICU準拠と記載あり (
- NSRegularExpression | Apple Developer Documentation
MySQL
- 参考
- MySQL :: MySQL 8.0 Reference Manual :: 12.8.2 Regular Expressions
- 8.0.4からICU実装と記載あり (
MySQL implements regular expression support using International Components for Unicode (ICU), which provides full Unicode support and is multibyte safe. (Prior to MySQL 8.0.4, MySQL used Henry Spencer's implementation of regular expressions, which operates in byte-wise fashion and is not multibyte safe.
)
- 8.0.4からICU実装と記載あり (
- MySQL :: MySQL 8.0 Reference Manual :: 12.8.2 Regular Expressions