我正在嘗試匹配 2 個 bbcode 標記內的逗號分隔串列的第一個數字。例如,我想在這兩種情況下匹配“10”:
[productid]10,20,30[/productid] => 10
[productid]10[/productid] => 10
我是正則運算式的新手。我一直在嘗試這樣的事情,但沒有運氣:
\[productid\](.*)(?=,)\[\/productid\]
任何幫助將不勝感激!謝謝你。
uj5u.com熱心網友回復:
用這個
\[productid\](\d ?)(?=\D).*\[\/productid\]
\[productid\]bbcode 打開標簽(捕獲組\d ?非貪心號碼匹配
)關閉組(?=Lookahead assertion - 斷言以下正則運算式匹配\D匹配除數字以外的任何內容
)關閉前瞻.*匹配任何東西\[\/productid\]bbcode 關閉標簽
查看預覽
uj5u.com熱心網友回復:
不依賴像前瞻斷言這樣的花哨功能的最直接的解決方案是\[productid\](\d ).*?\[\/productid\]. 解釋:
- 打開 BBCode 標簽
- 貪婪匹配標簽內的第一個數字
- 延遲匹配任何其他內容(包括其他逗號分隔的數字)直到相應的結束標簽。多個行內標簽需要惰性匹配
[productid]10[/productid] inline works too [productid]42,yay[/productid]才能正常作業;Artyom 的解決方案將失敗,在決議第一個標簽時貪婪地消耗整個第二個標簽。
uj5u.com熱心網友回復:
匹配結束的“標簽”(.*)可以過度匹配,因為點可以匹配任何字符。
請注意,(?=,)\[當您直接在右側斷言逗號時,它永遠不會匹配,但是您想要匹配[這是不可能的。
如果只有數字的逗號分隔串列,您可以使模式更具體:
\[productid](\d )(?:,\d )*\[\/productid]
解釋
\[productid]匹配[productid](\d )在第 1 組中捕獲 1 個數字(?:,\d )*可選擇重復,和 1 位數\[\/productid]匹配[/productid]
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485665.html
標籤:正则表达式
