Ruby regex: сопоставить альтернативные выражения с кавычками - PullRequest
1 голос
/ 31 января 2012

В Ruby я хочу, чтобы регулярное выражение совпадало с любым из двух выражений с одной группой в результате. Я хочу следующие результаты:

regex = /you tell me/
regex.match(%|My name is "Peter"|)[1]
=> "Peter"
regex.match(%|My name is 'Peter'|)[1]
=> "Peter"

Обратите внимание, что я хочу, чтобы 1-я группа ссылалась только на Peter без кавычек, и я хочу, чтобы в любом случае соответствовала ровно одна группа. Просто в качестве примера, это будет соответствовать первому случаю (только):

/^My name is "([^"]*)"$/

Я бы хотел что-то похожее на это. Я использую это для тестирования огурцов.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Это регулярное выражение может работать для вас

['"](\w+)['"]

Это соответствует ровно одной группе. Но он также допускает несбалансированные кавычки, такие как 'Peter"

Если вы хотите сопоставлять только сбалансированные кавычки, то вы не можете сделать это с одной группой (боюсь).

Во всяком случае, вот мой дубль :

('|")(\w+)\1

Это соответствует двум группам, и "Питер" находится во второй.

2 голосов
/ 31 января 2012

http://rubular.com/r/C78X0wwGej

(?=['"](\w+)['"])(?:"\1"|'\1')

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