使用正则表达式匹配无法像我预期的那样对变量起作用,尽管正则表达式替换在类似情况下可以正常工作。为什么?如何匹配 tl?(对 str 进行类似尝试也不起作用)。
\documentclass{article}
\setlength{\parindent}{0pt}
\begin{document}
\ExplSyntaxOn
This~works:\par
\regex_match:nnTF {iss}{Mississippi}
{\quad Match!\\}
{\quad No~match\\}
This~doesn't~work:\par
\tl_set:Nn \l_tmpa_tl { Mississippi }
\regex_match:nnTF {iss}{\l_tmpa_tl}
{\quad Match!\\}
{\quad No~match\\}
This~also~doesn't~work:\par
\tl_set:Nn \l_tmpa_tl { Mississippi }
\regex_match:nnTF {iss}\l_tmpa_tl
{\quad Match!\\}
{\quad No~match\\}
But~replace~works~just~as~expected:\par
\tl_set:Nn \l_tmpa_tl { Mississippi }
\regex_replace_all:nnN{i}{y}\l_tmpa_tl
\quad \l_tmpa_tl\\
\ExplSyntaxOff
\end{document}
答案1
一般来说,您不应该假设expl3
会扩展任何n
-type 参数。相反,您应该使用V
-type 参数。对于 的情况\regex_match:nnTF
,您需要自己生成此变体。
\documentclass{article}
\setlength{\parindent}{0pt}
\begin{document}
\ExplSyntaxOn
% \cs_generate_variant:Nn \regex_match:nnTF { nVTF }
\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { TF, T, F }
This~works:\par
\regex_match:nnTF {iss}{Mississippi}
{\quad Match!\\}
{\quad No~match\\}
This~didn't~work (but~ now~ it~ does):\par
\tl_set:Nn \l_tmpa_tl { Mississippi }
\regex_match:nVTF {iss}{\l_tmpa_tl}
{\quad Match!\\}
{\quad No~match\\}
But~replace~works~just~as~expected:\par
\tl_set:Nn \l_tmpa_tl { Mississippi }
\regex_replace_all:nnN{i}{y}\l_tmpa_tl
\quad \l_tmpa_tl\\
\ExplSyntaxOff
\end{document}