Использование Ruby Я бы хотел взять объект Regexp (или строку, представляющую действительное регулярное выражение, ваш выбор) и сделать токенизацию так, чтобы я мог манипулировать определенными частями.Tokenize (lex? Parse?) Регулярное выражение
В частности, я хотел бы взять регулярное выражение/строку, как это:
regex = /var (\w+) = '([^']+)';/
parts = ["foo","bar"]
и создать строку замены, которая заменяет каждый захват с буквальным из массива:
"var foo = 'bar';"
A метод наивного регулярного выражения для анализа регулярного выражения, например:
i = -1
result = regex.source.gsub(/\([^)]+\)/){ parts[i+=1] }
... не удался такие как вложенные группы захвата или не захватывающие группы, или регулярное выражение, имеющее скобки внутри класса символов. Следовательно, мое желание правильно разбить регулярное выражение на семантически допустимые части.
Есть ли существующий парсер Regex для Ruby? Есть ли (ужас ужасов) известное регулярное выражение, которое чисто соответствует регулярным выражениям? Есть ли камень, который я не нашел?
Мотивация по этому вопросу - это желание найти чистый и простой ответ на вопрос this question.
Интересный вопрос. Являются ли регулярные выражения регулярными выражениями сами? –
@ acheong87 Учитывая произвольно-вложенные группы захвата, я думаю, что нет. Однако мои знания о формализме вокруг обычных языков очень ограничены. – Phrogz
Вы изучили интерполяцию переменных регулярных выражений? – iain