我需要正则表达式来查找所有看起来像这样的短代码标签对,[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 关注
- 242 浏览
添加回答
举报
0/150
提交
取消
