当我在rubular.com练习时,我试图匹配一个正则表达式,检查一个单词是否以非辅音开头。我的方法是检查案例如何以非字母开头,或以数字或下划线开头,或检查空字符串 我发现了一个奇怪的行为:
我的正则表达式/^[aeiou_0-9\W]|^$/i
与k
和s
辅音相匹配!我不明白为什么。
有什么想法吗?
指向示例的链接 - > http://rubular.com/r/0zt0VPmcwr
答案 0 :(得分:3)
在某些版本中,这是Ruby正则表达式中的一个错误。在下拉列表中选择版本1.8.7,您将看到正则表达式正常工作。
编辑。查看http://ruby-doc.org/core-2.1.5/Regexp.html处的文档。更具体地说,在元字符部分:
答案 1 :(得分:3)
这非常有趣,因为当你使用\ W和/ i(它就像一场完美的风暴)时,你偶然发现了一个专门针对字母k和s的bug。
以下是解释错误的链接:https://bugs.ruby-lang.org/issues/4044
也许这是在更新版本的ruby中修补的,但是如果你不想经历一个新版本的ruby的麻烦,那么你可以明确地制作一个所有的反转角色类辅音:
/^[^bcdfghjklmnpqrstvwxyz]|^$/i
以下是rubular链接:http://rubular.com/r/URgsWP3suQ
编辑: 所以,我注意到你的正则表达式的其他一些东西是你的正则表达式(和我上面提供的正则表达式)只匹配单词的第一个字母,因为我提供的正则表达式匹配整个单词。我不知道这对你有什么影响,但我觉得值得指出。请参阅上面的rubular链接和下面的一个突出显示的区别(请参阅上面的链接如何突出显示单词的第一个字母,其中下面的链接突出显示整个单词):
^[^bcdfghjklmnpqrstvwxyz].*|^$