Заставить оператора Star Regex потерпеть неудачу - PullRequest
24 голосов
/ 23 февраля 2011

Я не уверен, что мой мозг изношен или я просто слишком об этом думаю.Следующий код взят из about_regular_expressions в Ruby Koans .

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 вернул ноль .Я знаю, что одним из способов было бы бросить \ перед *, чтобы заставить регулярное выражение явно искать символ *, но я уверен, что это не то, что они подразумевали.

Ответы [ 3 ]

41 голосов
/ 23 февраля 2011

Может быть, ответ на вопрос «когда * будет не соответствовать» - «никогда».

25 голосов
/ 23 февраля 2011

Поскольку * всегда будет принимать пустую строку, она потерпит неудачу, только если у вас есть что-то до или после того, что не соответствует.Например, ab*c не будет соответствовать azc, поскольку b* не будет соответствовать z, а c не будет соответствовать zc.

0 голосов
/ 07 августа 2018

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

z не соответствует - поэтому c * не может соответствовать. Повозился с опциями, пока assert_equal nil не пройдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...