У меня есть следующие команды LaTeX:PHP preg_match_all: параметры экстракта команды
\autocites[][]{}[][]{}
где параметры внутри []
являются необязательными другими внутренними {}
являются обязательными. Команда \autocites
может быть расширен дополнительными группами аргументов, как:
\autocites[a1][a2]{a3}[b1][b2]{b3}
\autocites[a1][a2]{a3}[b1][b2]{b3}[c1][c2]{c3}
...
Он также может быть использован, как это:
\autocites{a}{b}
\autocites{a}[b1][]{b3}
\autocites{a}[][b2]{b3}
...
Я хотел бы, чтобы извлечь его параметры, используя регулярное выражение в PHP , Это моя первая попытка:
/\\autocites(\[(.*?)\])(\[(.*?)\])(\{(.*?)\})(\[(.*?)\])(\[(.*?)\])(\{(.*?)\})/
Хотя это работает отлично, если \autocites
содержит только две группы из трех параметров я не могу понять, как заставить ее работать на неизвестное количество параметров.
Я также попытался использовать следующее выражение:
/\\autocites((\[(.*?)\]\[(.*?)\])?\{(.*?)\}){2,}/
На этот раз я в состоянии соответствовать даже большему числу параметров, но тогда я не в состоянии извлечь все значения, потому что PHP всегда просто дает мне содержание последних трех параметров:
Array
(
[0] => Array
(
[0] => \autocites[a][b]{c}[d][e]{f}[a][a]{a}
)
[1] => Array
(
[0] => [a][a]{a}
)
[2] => Array
(
[0] => [a][a]
)
[3] => Array
(
[0] => a
)
[4] => Array
(
[0] => a
)
[5] => Array
(
[0] => a
)
)
Любая помощь будет принята с благодарностью.
Возможно, проще всего совместить всю команду, включая случайные '(\ {. \} | \ [. \]) *' Вариации. Затем используйте второй 'preg_match_all' для извлечения отдельных параметров. В качестве альтернативы используйте '? (DEFINE)' или, по крайней мере, модификатор '/ x', чтобы создать управляемое регулярное выражение. – mario