Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';ruby中/\p{Alpha}/i和/\p{L}/i的区别是什么?_Ruby_Regex - Fatal编程技术网

什么';ruby中/\p{Alpha}/i和/\p{L}/i的区别是什么?

什么';ruby中/\p{Alpha}/i和/\p{L}/i的区别是什么?,ruby,regex,Ruby,Regex,我试图在ruby中构建一个regexp来匹配UTF-8中的alpha字符,比如ñíóü,等等。我知道/\p{alpha}/I和/\p{L}/I也可以工作,但有什么区别吗?它们似乎是等价的。(编辑:有时,请参见此答案的结尾) 从1.9版开始,Ruby似乎支持\p{Alpha}。在POSIX中,\p{Alpha}等于\p{L&}(对于支持Unicode的正则表达式;)。这将匹配具有大写和小写变体()的所有字符。Unicase字母将不匹配(而它们将由\p{L}匹配) Ruby的情况似乎并非如此(我随机

我试图在ruby中构建一个regexp来匹配UTF-8中的alpha字符,比如
ñíóü
,等等。我知道
/\p{alpha}/I
/\p{L}/I
也可以工作,但有什么区别吗?

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

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

Ruby的情况似乎并非如此(我随机选择了一个阿拉伯字符,因为阿拉伯语有unicase字母表):

  • 正如所料
  • 正如所料
这似乎很好地表明,
\p{Alpha}
只是Ruby中
\p{L}
的别名。在Rubular中,您还可以看到,
\p{Alpha}
在Ruby 1.8.7中不可用

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

编辑:


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

这很奇怪。根据,前者不应该在Ruby中可用。一定是过时了,因为我在rails控制台中同时使用了这两种工具。看起来它已经过时了。Ruby在1.9中开始使用一个新的正则表达式引擎,IIRC,所以这些可能是从那时开始的。好吧,根据(希望不是过时的)。
\p{Alpha}对于支持Unicode的引擎,
等于
\p{L&}
。此字符类仅包含具有小写和大写变体的字母()我手边没有一封信,你可以用它来测试这一点,但如果你找到一封信,那就值得一试。谢谢。我刚刚意识到你指出的关于
I
修饰符的内容。@BishmaStornelli我似乎不完全正确。请参阅我的编辑;)再次感谢你。回答得好。