让Star Regex运营商失败

时间:2011-02-22 21:24:47

标签: ruby regex

我不确定我的大脑是否已经疲惫不堪,或者我是否只是在考虑这个问题。以下代码来自 Ruby Koans 中的 about_regular_expressions

def test_asterisk_means_zero_or_more
   assert_equal "abb", "abbcccddddeeeee"[/ab*/]  
   assert_equal "a", "abbcccddddeeeee"[/az*/]  
   assert_equal "", "abbcccddddeeeee"[/z*/]  

 # THINK ABOUT IT:
 #
 # When would * fail to match?
end  

你如何让*失败?

当我说失败时,我假设他们的意思是他们希望assert_equal返回 nil 。我知道一种方法是在\前面放*以使正则表达式明确地查找*字符,但我很确定这不是它们的内容言下之意。

3 个答案:

答案 0 :(得分:40)

也许“什么时候*不匹配”的答案是“永远不会”。

答案 1 :(得分:25)

由于*将始终接受空字符串,因此只有在您之前或之后有不匹配的内容时,它才会失败。例如,ab*c将无法与azc匹配,因为b*z不匹配且czc不匹配。

答案 2 :(得分:0)

assert_equal nil, "abbcccddddeeeee"[/zc*/]

z不匹配-因此c *不匹配。修补选项直到assert_equal nil通过。