为了账号安全,请及时绑定邮箱和手机立即绑定

一个位置的正则表达式期望值取决于另一个位置的随机值

一个位置的正则表达式期望值取决于另一个位置的随机值

PHP
慕姐8265434 2021-12-24 15:17:57
我需要正则表达式来查找所有看起来像这样的短代码标签对,[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 组中的相同文本

  • \]- 一个]字符

请参阅正则表达式图

//img1.sycdn.imooc.com//61c575900001a55e09340194.jpg

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

)


查看完整回答
反对 回复 2021-12-24
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

如果您的标签只是括号之间的任何内容,[blah][/blah]您可以使用:

\[(.*?)\].*?\[\/\1\]


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号