Ответ 1
Вы близки, но используете неправильный метод:
sentence = "hello {name} is {thing}"
sentence.scan(/\{(.*?)\}/)
# => [["name"], ["thing"]]
Простой вопрос для большинства экспертов регулярных выражений, которые я знаю, но я пытаюсь вернуть все совпадения слов между некоторыми фигурными фигурными скобками в предложении; однако Ruby возвращает только один матч, и я не могу понять, почему именно.
Я использую это примерное предложение:
sentence = hello {name} is {thing}
с этим регулярным выражением, чтобы попытаться вернуть оба "{name}" и "{thing}":
sentence[/\{(.*?)\}/]
Однако Ruby возвращает "{name}". Может ли кто-нибудь объяснить, почему он не подходит для обоих слов?
Вы близки, но используете неправильный метод:
sentence = "hello {name} is {thing}"
sentence.scan(/\{(.*?)\}/)
# => [["name"], ["thing"]]
Можно сделать это с помощью положительного взгляда за спиной (?<=\{)
, Чтобы потребовать, чтобы перед матчем немедленно предшествовала левая фигурная скобка, и позитивного взгляда, чтобы потребовать, чтобы за матчем немедленно последовала правая фигурная скобка.
str = "hello {name} is {thing}"
str.scan /(?<=\{).*?(?=\})/
#=> ["name", "thing"]
Если могут быть вложенные фигурные скобки и нужны только строки внутри внутренних фигурных скобок, .*?
необходимо заменить на [^{\]*
:
str = "hello {my {name} is {thing} from} the swamp"
str.scan /(?<=\{)[^{]*?(?=\})/
#=> ["name", "thing"]