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

我需要正则表达式来查找所有看起来像这样的短代码标签对,[sc1-g-data]b[/sc1-g-data]但旁边的数字sc可能会有所不同,但它们必须匹配。

所以这样的事情将不起作用,\[sc(.*?)\-((.|\n)*?)\[\/sc(.*?)\-因为这匹配了我不想要的不匹配的标签对[sc1-g-data]b[/sc2-g-data]

所以第二个标签中的预期数字取决于第一个标签中的随机数


慕姐8265434
浏览 243回答 2
2回答

梵蒂冈之花

您可以使用正则表达式,如:\[(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)

陪伴而非守候

如果您的标签只是括号之间的任何内容,[blah][/blah]您可以使用:\[(.*?)\].*?\[\/\1\]
打开App,查看更多内容
随时随地看视频慕课网APP