我需要正則表達式來查找所有看起來像這樣的短代碼標簽對,[sc1-g-data]b[/sc1-g-data]但旁邊的數字sc可能會有所不同,但它們必須匹配。所以這樣的事情將不起作用,\[sc(.*?)\-((.|\n)*?)\[\/sc(.*?)\-因為這匹配了我不想要的不匹配的標簽對[sc1-g-data]b[/sc2-g-data]所以第二個標簽中的預期數字取決于第一個標簽中的隨機數
2 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
您可以使用正則表達式,如:
\[(sc\d*-[^\]\[]*)\]([\s\S]*?)\[\/\1\]
查看正則表達式演示
\[
- 一個[
字符(sc\d*-[^\]\[]*)
- 捕獲組 1:sc
, 0+ 數字,-
, 然后是除]
and 之外的0+ 個字符[
\]
- 一個]
字符([\s\S]*?)
- 捕獲組 2:任何 0+ 個字符,盡可能少\[\/
- 一個[/
字符串\1
- 存儲在第 1 組中的相同文本\]
- 一個]
字符
請參閱正則表達式圖:
PHP 演示:
$pattern = '~\[(sc\d*-[^][]*)](.*?)\[/\1]~s';
$string = '[sc1-g-data]a[/sc1-g-data] ';
if (preg_match($pattern, $string, $matches)) {
print_r($matches);
}
介意使用單引號字符串字面的,如果使用雙引號一個你需要使用\\1,不\1作為'\1'!="\1"在PHP。
輸出:
Array
(
[0] => [sc1-g-data]a[/sc1-g-data]
[1] => sc1-g-data
[2] => a
)
- 2 回答
- 0 關注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消