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

关于PHP preg_match的技术求助:提取双引号间无引号文本

解决PHP preg_match提取双引号内文本的问题

嘿,我来帮你搞定这个提取双引号内容的问题!这是PHP正则里挺常见的需求,咱们一步步拆解怎么正确实现。

单对双引号的情况

如果你的字符串里只有一对双引号,直接用preg_match配合简单的正则就能搞定:

$targetStr = '示例字符串:"我是要被提取的内容"';
// 核心正则:匹配双引号,捕获中间非双引号的内容
preg_match('/"([^"]+)"/', $targetStr, $matches);

// 提取到的内容会存在$matches[1]中($matches[0]是包含双引号的完整匹配)
if (isset($matches[1])) {
    echo $matches[1]; // 输出:我是要被提取的内容
}

咱们来拆解下这个正则的逻辑:

  • ":精准匹配开头的双引号
  • ([^"]+):这是捕获组,[^"]表示匹配任何不是双引号的字符,+表示匹配1次或多次(确保能拿到完整的内容)
  • ":精准匹配结尾的双引号

多对双引号的情况

如果字符串里有多组双引号,需要提取所有内容的话,就换成preg_match_all:

$targetStr = '第一组"内容A",第二组"内容B",第三组"内容C"';
preg_match_all('/"([^"]+)"/', $targetStr, $matches);

// 所有提取到的内容会存在$matches[1]这个数组里
if (!empty($matches[1])) {
    print_r($matches[1]);
    // 输出结果:Array ( [0] => 内容A [1] => 内容B [2] => 内容C )
}

处理包含转义双引号的特殊场景

如果你的字符串里有转义的双引号(比如\"),上面的正则就会失效,这时候需要调整正则来兼容转义字符:

$targetStr = '带转义的内容:"这里有个\"转义双引号\",要正确提取"';
// 兼容转义的正则:匹配转义字符+任意字符,或者非双引号字符
preg_match('/"((?:\\\\.|[^"])+)"/', $targetStr, $matches);

// 如果需要去掉内容里的转义反斜杠,再做一步替换
$cleanContent = preg_replace('/\\\\(.)/', '$1', $matches[1]);
echo $cleanContent; // 输出:这里有个"转义双引号",要正确提取

这个正则里的(?:\\\\.|[^"])+是个非捕获组,\\\\.用来匹配转义后的字符(比如\"),[^"]匹配普通的非双引号字符,两者结合就能正确识别包含转义的双引号内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:05