匹配不匹配的括号

匹配不匹配的括号

参数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。

相关内容