【问题标题】:PHP regular expression for text with json data带有 json 数据的文本的 PHP 正则表达式
【发布时间】:2015-01-23 06:53:28
【问题描述】:

我正在寻找一个 PHP 正则表达式来匹配文本字符串中多组 json 数据的模式。

第一段文字

[[{"fid":"28","view_mode":"teaser","fields":{},"type":"media","attributes":{"class":"media-element file-teaser"},"link_text":null}]]

第二段

[[{"fid":"26","view_mode":"preview","fields":{},"type":"media","attributes":{"class":"file media-元素文件预览"},"link_text":"mohan sample.mp4"}]]

以上是带有 json 样本的示例文本,我想从每个 json 数据中提取“fid”的值。

有什么建议吗?

【问题讨论】:

  • json_decode()这个直接读取值不是更方便吗?
  • @anubhava json_decode() 如果与其他文本混合使用将无法使用。他需要正则表达式来查找单个 JSON 对象,以便对其进行解码。
  • 您是否需要能够匹配任何 JSON,或者只是与您发布的内容非常相似的内容?我怀疑一般来说没有简单的正则表达式来匹配 JSON,因为递归和转义。

标签: php regex preg-match-all


【解决方案1】:
\[\[{(?:(?!\]\])[\s\S])*"fid":"\K\d+

你可以试试这个。查看演示。

https://www.regex101.com/r/rG7gX4/10

$re = "/\\[\\[{(?:(?!\\]\\])[\\s\\S])*\"fid\":\"\\K\\d+/mi";
$str = "[[{\"fid\":\"28\",\"view_mode\":\"teaser\",\"fields\":{},\"type\":\"media\",\"attributes\":{\"class\":\"media-element file-teaser\"},\"link_text\":null}]]\n\nSecond Paragraph\n\n[[{\"fid\":\"26\",\"view_mode\":\"preview\",\"fields\":{},\"type\":\"media\",\"attributes\":{\"class\":\"file media-element file-preview\"},\"link_text\":\"mohan sample.mp4\"}]]";

preg_match_all($re, $str, $matches);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2012-10-04
    相关资源
    最近更新 更多