参数xparse
r
指定为。我正在尝试使用 =和 =正则r<token1><token2>
表达式检查表达式是否与该匹配(r
暂时忽略)。下面的示例返回 F,而它应该返回 T。有什么建议吗?\{
>
\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
%\regex_const:Nn\c__erw_regex{\cB\{.+\cE>}
\regex_const:Nn\c__erw_regex{\{.+\cO>}
\regex_match:NnTF
\c__erw_regex
%{{Hello>} % ERROR Runaway arg
{\{Hello>}
{T}
{F}
\ExplSyntaxOff
\end{document}
答案1
在正则表达式中,这些字符\{
用于匹配{
。而您想要匹配\{
,即单个 TeX 标记。
一般来说,为了匹配一个控制序列,比如\foo
,它不被认为是由l3regex
四个字符组成,而是一个单一的对象(标记),你会使用\c{foo}
。但这里不能使用\c{{}
,因为它会不平衡。没问题!使用\c{\{}
就好了。
\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
\regex_const:Nn \c__erw_bracerangle_regex { \c{\{}.+>}
\regex_match:NnTF \c__erw_bracerangle_regex {\{Hello>} {T} {F}
\ExplSyntaxOff
\end{document}
这将打印“T”。
请注意,您不需要\cO>
在搜索表达式中使用,因为l3regex
在检查输入标记列表中的字符时“类别代码不可知”。\cO
不过,您可能需要在替换表达式中使用或类似的前缀,否则字符将被分配类别代码 12。