任何人都可以解释为什么以下测试没有通过。正则表达式正在得到一个我不想要的匹配。
我希望找到以电话,传真或网络开头的文字匹配但由于某种原因,测试中的网址正在匹配:
def test_url_should_match
assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk")
end
答案 0 :(得分:4)
[...]
指定character class,它告诉正则表达式引擎匹配括号中包含的其中一个字符。因此,[tel|fax|web]
表示“匹配t或e或l或|或f或a或x或w或e或b”(|
在类中出现不止一次这一事实无关紧要)。由于字符串以字符类中的w开头,因此模式匹配。
正如其他答案所说,您希望使用括号(...)
来对您的轮换进行分组。
答案 1 :(得分:3)
尝试
assert_no_match(/^(tel|fax|web)/i, "www.jehall.co.uk")
那应该有用。否则,您将匹配字符,即网络中的w将匹配。
答案 2 :(得分:2)
你应该使用
/^(?:tel|fax|web)/i