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

微波能量輸出

如您所見,bcdefg從未被發現。這是正規表示式搜尋的常見行為:輸入字串的任何部分都不屬於多個符合項目。相反,在找到匹配項後,搜尋引擎會丟棄輸入字串的任何已消耗部分,並在匹配後繼續搜尋。

相關內容