\regex_match が期待通りに動作しない

\regex_match が期待通りに動作しない

次のマクロと次の入力があります:

\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}

問題は、A1 と B2 のみが抽出され、B2 と C3 が抽出されないことです。正規表現の何が問題なのでしょうか?

ここに画像の説明を入力してください

答え1

あなたは、何がそうなのかを誤解しています\regex_extract_all:nnN。このより単純な例を考えてみましょう。

\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}

MWE出力

ご覧のとおり、、bcまたはdefg見つかりません。これは正規表現検索の通常の動作です。入力文字列のどの部分も複数の一致の一部ではありません。むしろ、一致が見つかると、検索エンジンは入力文字列の消費された部分を破棄し、一致後の検索を続けます。

関連情報