我想创建一个正则表达式用于 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
在正则表达式的上下文中,的参数
\u
应该是标记列表变量的名称;您使用的是整数变量。没有“递归”:您不能给出
\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}