我不确定我的大脑是否已经疲惫不堪,或者我是否只是在考虑这个问题。以下代码来自 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 。我知道一种方法是在\
前面放*
以使正则表达式明确地查找*
字符,但我很确定这不是它们的内容言下之意。
答案 0 :(得分:40)
也许“什么时候*不匹配”的答案是“永远不会”。
答案 1 :(得分:25)
由于*
将始终接受空字符串,因此只有在您之前或之后有不匹配的内容时,它才会失败。例如,ab*c
将无法与azc
匹配,因为b*
与z
不匹配且c
与zc
不匹配。
答案 2 :(得分:0)
assert_equal nil, "abbcccddddeeeee"[/zc*/]
z不匹配-因此c *不匹配。修补选项直到assert_equal nil
通过。