8

我正在尝试在 ruby​​ 中构建一个正则表达式以匹配 UTF-8 中的 alpha 字符ñíóúü等。我知道/\p{Alpha}/i它也可以工作,/\p{L}/i但有什么区别?

4

1 回答 1

14

它们似乎是等价的。(编辑:有时,请参阅此答案的结尾)

似乎 Ruby \p{Alpha}从 1.9 版开始就支持了。在 POSIX\p{Alpha}中等于\p{L&}(对于支持 Unicode 的正则表达式;请参见此处)。这匹配具有大小写变体的所有字符(请参见此处)。不匹配单写字母(而它们将匹配\p{L}.

这对 Ruby 来说似乎不是真的(我随机选择了一个阿拉伯字符,因为阿拉伯语有一个单写字母):

这似乎是一个很好的迹象,\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 回答