Ruby 意外正则表达式匹配
有人能解释一下为什么下面的测试没有通过吗。正则表达式正在得到一个我不想要的匹配 我想在以Tel、Fax或Web开头的文本中找到匹配项,但出于某种原因,测试中的url正在获得匹配项:Ruby 意外正则表达式匹配,ruby,regex,Ruby,Regex,有人能解释一下为什么下面的测试没有通过吗。正则表达式正在得到一个我不想要的匹配 我想在以Tel、Fax或Web开头的文本中找到匹配项,但出于某种原因,测试中的url正在获得匹配项: def test_url_should_match assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk") end 你应该使用 /^(?:tel|fax|web)/i 试一下 assert_no_match(/^(tel|fax|web)/i,
def test_url_should_match
assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk")
end
你应该使用
/^(?:tel|fax|web)/i
试一下
assert_no_match(/^(tel|fax|web)/i, "www.jehall.co.uk")
这应该行得通。否则,您将与字符匹配,即web中的w将匹配。
[…]
在正则表达式中指定一个,它告诉正则表达式引擎匹配括号中包含的其中一个字符。因此,[tel | fax | web]
的意思是“匹配t或e或l或|或f或a或x或w或e或b”(事实上,
在课堂上出现多次是不相关的)。由于字符串以字符类中的w开头,因此模式匹配
正如其他答案所说,您希望使用括号
(…)
来对您的备选方案进行分组。为什么有猫王微笑?:
在那里?@Aillyn:这样它就不会创建捕获。@Aillyn:您是说?:
不应该在那里?实际上,
多次出现的事实是相关的,因为它会产生一个警告,如果OP真的费心阅读,它会告诉他出了什么问题:警告:字符类重复了范围:/[^[tel | fax | web]/
@Jörg它在irb或Rubular中不会给我警告,但公平点。