You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求PHP中preg_match_all匹配方括号标签内字符串的正则表达式

解决PHP preg_match_all提取vc_column_text标签内容的问题

嘿,我帮你排查下问题所在,然后给出可行的解决方案~

你的问题出在正则表达式的几个细节上:

  • 正则里的[和]是特殊元字符,用来定义字符集,你直接写[vc_column_text会被当成字符集处理,而不是匹配字面意义的方括号
  • 原正则的定界符用了单引号,和字符串的单引号冲突,容易导致解析错误
  • 匹配属性部分的(.*?)太宽泛,可能会错误匹配到不属于标签的内容

正确的正则写法和代码示例

你可以用这个修正后的正则,结合preg_match_all来提取内容:

$string = '[vc_row][vc_column][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text css=".vc_custom_1576642149231{margin-bottom: 0px !important;}"]This is the string I want to fetch[/vc_column_text][/vc_column][/vc_row]';

// 使用~作为定界符,转义[],精确匹配标签属性和内容
preg_match_all('~\[vc_column_text[^\]]*\](.*?)\[/vc_column_text\]~s', $string, $matches);

// 提取到的内容在$matches[1]里
print_r($matches[1]);

正则解释

  • ~:作为正则的定界符,避免和字符串里的引号冲突
  • \[vc_column_text:转义[,匹配开头的标签起始部分
  • [^\]]*:匹配标签内的所有属性,意思是“匹配任意不是]的字符,0次或多次”,确保只会匹配到当前标签的属性部分
  • (.*?):非贪婪匹配标签内的内容,避免跨标签匹配
  • \[/vc_column_text\]:转义[和],匹配闭合标签
  • s修饰符:让.可以匹配换行符(如果你的内容里有换行的话也能正确提取)

运行结果

执行上面的代码后,$matches[1]会输出:

Array
(
    [0] => This is the string I want to fetch
)

这样就能准确获取到你想要的标签内的内容啦~

内容的提问来源于stack exchange,提问作者Jeram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:02:40