Аргументы функции match заканчиваются рекурсивным регулярным выражением pcre - PullRequest
0 голосов
/ 02 января 2019

Моя цель - преобразовать это

({1, 2}, foo, [2, 3], foo, (3, 4), (3, 4))

в это

(
    {1, 2},
    foo,
    [2, 3],
    foo,
    (3, 4),
    (3, 4)
)

Если вам интересно, где здесь функция, просто мысленно добавьте foo в начале.

Моя попытка состояла в том, чтобы сопоставить обратную строку с чем-то вроде этого

(\s*)[),](?:(\}(?:[^{}]*|(?R))*\{|\)(?:[^()]*|(?R))*\(|\](?:[^[\]]*|(?R))*\[)\w*)

Идея здесь состоит в том, чтобы сопоставить шаблон, начинающийся с, возможно, пустой группы пробелов (которую я хочу заменить на новую строку)затем запятая, а затем аргумент, который может содержать списки, вызовы функций, наборы и т. д.

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

Не беспокойтесь, предлагая использовать средство форматирования кода.Я знаю о них.Я хочу, чтобы решение с pcre было минимально возможным, с таким уродливым регулярным выражением, как требуется.

1 Ответ

0 голосов
/ 02 января 2019

Я думаю, что мне удалось сделать то, что я хочу с этим регулярным выражением https://regex101.com/r/Zf8L4q/3

([(,])(\s*)((?:[^(),'"<>{}[\]]*(?:\<(?:[^<>]*?|(?3))*\>|\((?:[^()]*?|(?3))*\)|\[(?:[^[\]]*?|(?3))*\]|\{(?:[^{}]*?|(?3))\}|'(?:[^'\\]+|\\.)*')?)*)(\)?)

...