我正在尝试在 ruby 中构建一个正则表达式以匹配 UTF-8 中的 alpha 字符ñíóúü
等。我知道/\p{Alpha}/i
它也可以工作,/\p{L}/i
但有什么区别?
问问题
1479 次
1 回答
14
它们似乎是等价的。(编辑:有时,请参阅此答案的结尾)
似乎 Ruby \p{Alpha}
从 1.9 版开始就支持了。在 POSIX\p{Alpha}
中等于\p{L&}
(对于支持 Unicode 的正则表达式;请参见此处)。这匹配具有大小写变体的所有字符(请参见此处)。不匹配单写字母(而它们将匹配\p{L}
.
这对 Ruby 来说似乎不是真的(我随机选择了一个阿拉伯字符,因为阿拉伯语有一个单写字母):
\p{L}
(任何字母)匹配。- 区分大小写的类
\p{Lu}
,\p{Ll}
,\p{Lt}
不匹配。正如预期的那样。 p{L&}
不匹配。正如预期的那样。\p{Alpha}
火柴。
这似乎是一个很好的迹象,\p{Alpha}
它只是\p{L}
Ruby 中的一个别名。在 Rubular 上,您还可以看到\p{Alpha}
Ruby 1.8.7 中没有该功能。
请注意,i
修饰符在任何情况下都无关紧要,因为两者都\p{Alpha}
匹配\p{L}
大写和小写字符。
编辑:
哈哈,有区别!我刚刚找到了这个关于 Ruby 的新正则表达式引擎的 PDF(如上所述,从 Ruby 1.9 开始使用)。无论编码如何都可用(如果没有 Unicode 支持,\p{Alpha}
可能只会匹配),而具体是 Unicode 属性。这意味着,其行为与 POSIX 正则表达式完全相同,不同之处在于这里对应于,但在 POSIX 中它对应于。[A-Za-z]
\p{L}
\p{Alpha}
\p{L}
\p{L&}
于 2012-11-22T17:10:13.177 回答