Я сопоставляюсь с LaTeX-командами вида \ command {...} {...}. Второй аргумент является необязательным. Мой RegEx - только слегка модифицированная версия одного примера в perl6 faq , потому что мне нужно позаботиться о том, чтобы внутри аргументов могли быть вложенные команды LaTeX.
Я хочу использовать именованные группы. Как я могу это сделать? Я пытался использовать (? : ...) вместе с (? & First), но это дает мне ошибку "бесконечной рекурсии". Я мог бы быть немного над головой с точки зрения RegExes здесь, но это работало очень хорошо до сих пор.
my $regex = qr/
\\command
(\{
(?:
[^\{\}]++
|
(?1)
)*
\})
(\{
(?:
[^\{\}]++
|
(?2)
)*
\})?
/x;
$s =~ m/$regex/g