ruby中/ \ p {Alpha} / i和/ \ p {L} / i之间有什么区别?

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

它们似乎是等价的。 ( 编辑:有时,看到这个答案的结尾)

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

这似乎不适用于Ruby(我选择了一个随机的阿拉伯字符,因为阿拉伯语有一个unicase字母表):

  • \p{L} (任何字母)匹配。
  • 区分大小写的类\p{Lu}\p{Ll}\p{Lt}不匹配。 正如所料。
  • p{L&}不匹配。 正如所料。
  • \p{Alpha}匹配。

这似乎是一个非常好的迹象, \p{Alpha}只是Ruby中\p{L}的别名。 在Rubular上,您还可以看到\p{Alpha}在Ruby 1.8.7中不可用。

请注意, i修饰符在任何情况下都无关紧要,因为无论如何, \p{Alpha}\p{L}匹配大写和小写字符。

编辑:

哈哈,有区别! 我刚刚发现了这个关于Ruby的新正则表达式引擎的PDF (如上所述,正在使用Ruby 1.9)。 无论编码如何, \p{Alpha}都可用(如果没有Unicode支持,可能只匹配[A-Za-z] ),而\p{L}特别是Unicode属性。 这意味着, \p{Alpha}行为与POSIX正则表达式完全相同,不同之处在于此处对应于\p{L} ,但在POSIX中它对应于\p{L&}