【问题标题】:Regex for text between double square brackets正则表达式用于双方括号之间的文本
【发布时间】:2016-01-24 20:51:33
【问题描述】:

这是我的示例文本:

text text text
[[{"fid":"3228","view_mode":"full","fields":{"format":"full","field_file_image_alt_text[und][0][value]":"text text text","field_file_image_title_text[und][0][value]":"","field_file_image_gallery_content[und][0][value]":"","field_file_image_gallery_content[und][0][format]":"full_html"},"type":"media","link_text":null,"attributes":{"alt":"text text","height":"647","width":"421","class":"media-element file-full"}}]]

我想提取双括号之间的文本:[[]]

这是我的方法:

preg_match_all("/\[[^\]]*\]/", $txt, $matches);

但它仅适用于单括号之间的文本,例如 []

我的正则表达式如何才能提取双括号之间的文本?

【问题讨论】:

  • 正则表达式不应该是/\[\[(.*)\]\]/i吗?

标签: php regex preg-match-all


【解决方案1】:

试试这个 - 第一场比赛:

if (preg_match('/\[\[(.*?)\]\]/i', $buffer, $regs)) {
    $result = $regs[1];  // Matched text
} else {
    $result = "";
}

或者这个 - 遍历所有匹配项:

preg_match_all('/\[\[(.*?)\]\]/i', $buffer, $regs, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($regs[1]); $i++) {
    // Matched text = $regs[1][$i];
}

如果您没有真正的论据来处理这样的数据,请按照 Borodin 的回答并使用 json_decode。这可能会更好。

【讨论】:

  • 这被否决了。我必须投票才能将其设为 0。我对此进行了测试,并且运行顺利。像这样拒绝投票的人对任何人都没有帮助,实际上把我带走了一分钟。这是非常具有破坏性的。顺便说一句,干得好。这是完美的答案;老实说,wtf?
【解决方案2】:

您正在尝试使用正则表达式处理 JSON 数据。这充满了危险。

使用json_decode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多