\regex_match não está funcionando conforme esperado

\regex_match não está funcionando conforme esperado

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?

insira a descrição da imagem aqui

Responder1

Você está enganado sobre o que \regex_extract_all:nnNfaz. 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}

Saída MWE

Como você pode ver, bc, deou fgnunca 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.

informação relacionada