Брекеты в регулярном выражении для блока под-метода ruby - PullRequest
1 голос
/ 16 октября 2011

У меня есть строка:

s = "<aaa>bbb</ccc>"

Я хочу получить aaa и bbb в блоке ruby ​​для метода sub.Если я позвоню:

s.sub(/<([a-z]+)>([\s\S]+)<\/[a-z]+>/,"first=\\1 second=\\2")

, все будет работать так, как я ожидаю, поэтому вывод «first = aaa second = bbb».Затем я вызываю тот же regexp с ruby-block, но он возвращает только всю строку, но не \\ 1 и \\ 2 части:

s.sub(/<([a-z]+)>([\s\S]+)<\/[a-z]+>/) { |x,y| puts x; puts y; }

Выходные данные этого случая

<aaa>bbb</ccc>, nil. 

Как я могу получить предложения в скобках, такие как \\ 1, \\ 2 в ruby-block для метода sub?

1 Ответ

1 голос
/ 16 октября 2011

Строка с sub всегда будет полным совпадением.Чтобы добраться до захватов, вы можете использовать $1 и $2 внутри блока.

...