我试图在输入字段框中避免使用电子邮件,因此我使用多个正则表达式,我得到的匹配比我想要的更多,这是正则表达式:
(at( )*\w+(\b\.ie\b|\b\ .ie\b))
它应该匹配domain.ie上的电子邮件等尝试,但我也得到了这部分匹配:
也是at a tie
他们
如何修改此正则表达式以使其不符合此情况?
我试过了:
(at( )[a-z^\s]\w+(\b\.ie\b|\b\ .ie\b))
以及其他几件事,我仍然得到相同的匹配,我怎么能保持我想要的匹配但是要避免这种情况
答案 0 :(得分:1)
为了匹配“at foo.ie”或“at foo .ie”之类的东西,这样简单的事情就可以了:/\bat +\w+ ?\.ie\b/
答案 1 :(得分:0)
要避免意外匹配,请尝试在正则表达式中使用文字句点\.
。针对少数输入进行测试看起来像是你想要的:
tests = [
{:text => 'at domain.ie', :expected => true},
{:text => 'at something.ie', :expected => true},
{:text => 'at foo.ie', :expected => true},
{:text => 'also what a tie they are', :expected => false}
]
regex = /\bat\s+\w+\s?\.ie\b/
tests.each do |test|
text = test[:text]
expect_match = test[:expected]
matched = false
if text =~ regex
matched = true
end
if expect_match == matched
puts "OK: expected=#{expect_match} == #{matched} for regex=#{regex} vs text=#{text}"
else
puts "NOT OK: expected=#{expect_match} != #{matched} for regex=#{regex} vs text=#{text}"
end
end
如果您有更多测试用例,应该很容易将它们添加到上面的代码中 - 尽管您可能希望使用类似rspec的内容进行更正式的测试。