\regex_match 在 tl 上无法按预期工作

\regex_match 在 tl 上无法按预期工作

使用正则表达式匹配无法像我预期的那样对变量起作用,尽管正则表达式替换在类似情况下可以正常工作。为什么?如何匹配 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}

相关内容