l3regex:来自变量的括号量词

l3regex:来自变量的括号量词

我想创建一个正则表达式用于 expl3 语法,其中括号量词的整数取自先前存储相关值的变量。

但是,如果我尝试\d{ \u{l_myint_int} }按照以下 MWE 所示进行操作,则会在日志中写入一条警告,指出Braced quantifier '{' may not be followed by 'u'.。因此,似乎无法\u在括号量词内使用。我该如何解决这个问题,可能使用一种变通方法?

\documentclass{article}
\begin{document}

\ExplSyntaxOn

\seq_new:N \l_myseq_seq

\regex_extract_all:nnN { \d{ 2 } } { 1234 } \l_myseq_seq

x\seq_use:Nn \l_myseq_seq { , }x

\par

\int_new:N \l_myint_int
\int_set:Nn \l_myint_int { 2 }

\regex_extract_all:nnN { \d{ \u{l_myint_int} } } { 1234 } \l_myseq_seq
% Log: LaTeX3 Warning: Braced quantifier '{' may not be followed by 'u'.

x\seq_use:Nn \l_myseq_seq { , }x

\ExplSyntaxOff

\end{document}

答案1

  1. 在正则表达式的上下文中,的参数\u应该是标记列表变量的名称;您使用的是整数变量。

  2. 没有“递归”:您不能给出\d一个要解释的正则表达式。

对于第一个问题,使用tl变量。

对于第二个问题,使用变体。

\documentclass{article}
\begin{document}

\ExplSyntaxOn

\seq_new:N \l_myseq_seq

\regex_extract_all:nnN { \d{ 2 } } { 1234 } \l_myseq_seq

x\seq_use:Nn \l_myseq_seq { , }x

\par

\tl_new:N \l_myint_tl
\tl_set:Nn \l_myint_tl { 2 }

\cs_new_protected:Nn \jasper_regex_extract_digit:nnN
 {
  \regex_extract_all:nnN { \d{#1} } { #2 } #3
 }
\cs_generate_variant:Nn \jasper_regex_extract_digit:nnN { V }

\jasper_regex_extract_digit:VnN \l_myint_tl { 1234 } \l_myseq_seq

x\seq_use:Nn \l_myseq_seq { , }x

\ExplSyntaxOff

\end{document}

在此处输入图片描述

相关内容