Я пытаюсь выяснить, почему повторение Ruby для сопоставления с образцом не возвращает то, что, как я думаю, должно быть.
Вот самая простая версия моей проблемы:
str="Hello"
# Matches "Hello" correctly
pattern1=/[A-Z][a-z]*/
r = pattern1.match(str)
puts("[#{r}]")
# prints "[Hello]"
# Matches "e" correctly
pattern2=/[a-z]/
r = pattern2.match(str)
puts("[#{r}]")
# prints "[e]"
# Should match "ello" but doesn't
pattern3=/[a-z]*/
r = pattern3.match(str)
puts("[#{r}]")
# prints "[]"
Согласно документам , * совпадение должно быть жадным. Кажется, это не так. Что я делаю не так?
Для чего-то, grep (и PHP), похоже, ведет себя как ожидалось:
$ echo "Hello" | grep "[A-Z][a-z]*"
Hello
Я использую ruby 2.6.5p114, если что помогает.