很抱歉,我發現用我糟糕的英語很難表達這個問題。所以,讓我們直接看一個簡單的例子。
假設我們有一個主題字串"apple:banana:cherry:durian"。我們要匹配的主題,并有$1,$2,$3和$4成為"apple","banana","cherry"和"durian"分別。我正在使用的模式是^(\w )(?::(.*?))*$,并且$1將"apple"如預期的那樣。但是,$2將"durian"代替"banana".
因為要匹配的主題字串不需要是 4 個專案,例如,它可以分別是"one:two:three"、 和$1、$2將是"one"和"three"。同樣,中間件丟失了。
在這種情況下使用的正確模式是什么?順便說一下,我將在 C 代碼中使用 PCRE2,因此沒有splitPerl 內置函式。謝謝。
uj5u.com熱心網友回復:
重復一個捕獲組只會捕獲最后一次迭代的值。相反,您可以使用\G錨點來獲得連續匹配。
如果整個字串只能包含以冒號分隔的單詞字符:
(?:^(?=\w (?::\w ) $)|\G(?!^):)\K\w
模式匹配:
(?:非捕獲組^斷言字串的開始(?=\w (?::\w ) $)從當前位置斷言 1 個單詞字符和 1 個重復:和 1 個單詞字符直到字串的結尾|或者\G(?!^):在上一場比賽結束時斷言位置,而不是在開始和比賽中:
)關閉非捕獲組\K\w忘記到目前為止匹配的內容,匹配 1 個單詞字符
正則運算式演示
只允許字串開頭的單詞,并允許單詞 chars 之后的其他字符:
\G:?\K\w
正則運算式演示
uj5u.com熱心網友回復:
如果輸入包含嚴格的由:, like分隔的感興趣的專案,如item1:item2:item3問題中的嘗試所示,那么您可以使用
/([^:] )/g;
它捕獲了items的串列。如何檢索它取決于所使用的語言。
上面的/g“修飾符”(和捕獲組)指的是 Perl 的語法,問題在開始時是如何標記的。在 C 中,可以使用std::match_results在regex_matchor之后檢索子運算式regex_search(問題中的某些背景關系會有所幫助)。會更新...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328475.html
