Perl Unicode 羹调手册:禁用内建字符类中的 Unicode 感知

℞ 24: 禁用内建字符类中的 Unicode 感知

许多正则表达式教程都忽略了这样一个事实:内建字符类包括的不仅仅是 ASCII 字符。特别是像“单词字符” (\w)、“单词边界” (\b)、“空白” (\s) 和“数字” (\d) 这样的类都遵循 Unicode。

Perl 5.14 添加了 /a 正则表达式修饰符来禁用 \w\b\s\d 以及 POSIX 类在 Unicode 上的正确工作。这限制了这些类只能匹配 ASCII 字符。使用 re 命名空间来在词法作用域中限制这些字符类。

 use v5.14;
 use re "/a";

… 或者使用 /a 修饰符来影响单个正则表达式

 my($num) = $str =~ /(\d+)/a;

您始终可以使用特定的非 Unicode 属性,例如 \p{ahex}\p{POSIX_Digit}。无论什么字符集修饰符(/d /u /l /a /aa)生效,属性仍然正常工作。

上一页: ℞ 23: 获取字符类别

系列索引: 标准前言

下一页: ℞ 25: 在正则表达式中匹配 Unicode 属性

标签

反馈

这篇文章有问题?请通过在 GitHub 上打开问题或拉取请求来帮助我们。