Eu tenho a seguinte macro e a seguinte entrada:
\def\something#1{
\regex_extract_all:nnN{
([A-Za-z]{1}\d{1,2})\s*-\|\s*([A-Za-z]{1}\d{1,2})
}{#1}\l_my_seq
\seq_map_inline:Nn\l_my_seq{##1,\par}
}
\something{A1-|B2-|C3}
O problema é que extraio apenas A1 e B2, e não B2 e C3. O que há de errado com a expressão regular?
Responder1
Você está enganado sobre o que \regex_extract_all:nnN
faz. Considere este exemplo mais simples.
\documentclass{article}
\ExplSyntaxOn
\def\something#1{
\regex_extract_all:nnN{..}{#1}\l_my_seq
\seq_map_inline:Nn\l_my_seq{##1,~}
}
\ExplSyntaxOff
\begin{document}
\something{abcdefg}
\end{document}
Como você pode ver, bc
, de
ou fg
nunca são encontrados. Este é o comportamento normal das pesquisas de expressões regulares: Nenhuma parte da string de entrada faz parte de múltiplas correspondências. Em vez disso, após encontrar uma correspondência, o mecanismo de busca descarta qualquer parte consumida da string de entrada e continua pesquisando a correspondência.