看看这段代码:
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\tl_set:Nn\l__foo{a a a b a a a}
\regex_replace_all:nnN { a (.+) a }{ [ \1 ] } \l__foo
\regex_replace_all:nnN { a (.+) a }{ [ \1 ] } \l__foo
\regex_replace_all:nnN { a (.+) a }{ [ \1 ] } \l__foo
\l__foo
\ExplSyntaxOff
\end{document}
它呈现:
[[[b]]]
如您所见,我必须使用\regex_replace_all
三次。这显然是代码重复。此外,当输入(a a a b a a a
)不是常量而是命令的参数时,这是不可接受的。我如何摆脱代码重复并确保将\regex_replace_all
其应用于文本直到它停止变化?
请不要建议更改正则表达式,这只是一个激励的例子,我的实际用例是不同的。
答案1
T
如果匹配成功,您可以使用运行真实分支的形式:
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\tl_set:Nn\l__foo{a a a b a a a}
\cs_new:Npn\foo_aux: {
\regex_replace_all:nnNT { a (.+) a }{ [ \1 ] } \l__foo \foo_aux:
}
\foo_aux:
\l__foo
\ExplSyntaxOff
\end{document}