任何人都可以解釋爲什麼下面的測試沒有通過。正則表達式在我不想要的地方進行匹配。意外的正則表達式匹配
我想找到的文本匹配,與電話,傳真或網絡,但由於某些原因,在測試的網址是得到一個比賽開始:
def test_url_should_match
assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk")
end
任何人都可以解釋爲什麼下面的測試沒有通過。正則表達式在我不想要的地方進行匹配。意外的正則表達式匹配
我想找到的文本匹配,與電話,傳真或網絡,但由於某些原因,在測試的網址是得到一個比賽開始:
def test_url_should_match
assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk")
end
試一下
assert_no_match(/^(tel|fax|web)/i, "www.jehall.co.uk")
這應該有效。否則,你會匹配字符,即網絡中的w將匹配。
[...]
在正則表達式中指定一個character class,它告訴正則表達式引擎匹配括號中包含的這些字符之一。因此,[tel|fax|web]
的意思是「匹配t或e或l或|或f或a或x或w或e或b」(|
在課堂上多次出現的事實是無關緊要的)。由於字符串以字符類中的w開始 - 模式匹配。
正如其他答案所說,你想使用括號(...)
來代替你的替代。
事實上,'|'多次出現的事實*是相關的,因爲它會產生一個警告,如果OP實際上對* read *感到困擾的話,它已經告訴他什麼是錯誤的:'warning:character class有重複的範圍:/ [^ [tel | fax | web]] /' – 2010-08-23 17:59:48
@Jörg在irb或Rubular中沒有給出警告,但公平點。 – 2010-08-23 18:06:42
可能重複[是我的preg_match語法有效?](http://stackoverflow.com/questions/3246239/is-my-preg-match-syntax-valid) – kennytm 2010-08-23 15:22:15