【问题标题】:How to extract text between quotes containing a specific word?如何提取包含特定单词的引号之间的文本?
【发布时间】:2014-10-10 08:07:42
【问题描述】:

我试图提取的引号之间的文本,在文本中也有引号,例如:“data”:“value”

具体的词是“数据”。 “价值”总是不同的。提取后,它应该是带有引号的 "data":"value"。

到目前为止...

<?
$dat = "file.dat";
$text = file_get_contents($dat);
$res = preg_match_all ('/"([^"]*)"/', $text, $matches);
if ($res) {
    foreach (array_unique ($matches[0]) as $data) {
    echo "$data";
}
}
    else {
    echo "No Data Found.";
}

我的代码只是提取双引号之间的所有单词。我如何完成我想做的事情?提前谢谢你。

【问题讨论】:

  • 看起来像 JSON 数据,为什么不尝试正确读取 JSON 对象呢? $res = json_decode($text, true); print_r($res)
  • 或者可能是 CSV。在您冒险完善您选择的工具之前,请退后一步并解释您想要完成的实际任务。 What is the XY problem?
  • 它用于 Mandrill 的 webhook。我只是想从中获取电子邮件地址。有时它会抛出一个不在我的订阅者列表中的随机电子邮件地址。我列表中的电子邮件地址使用上述格式。
  • mandrillapp.com/api/docs/webhooks.html 表示 JSON。 PHP 已经为此提供了解析器。
  • @Brian 从外观上看,那一堆信息是 json,请在结果上尝试上面的 Prix 建议。

标签: php regex json


【解决方案1】:

正如 cmets 注意到的那样。您尝试解析的格式是 JSON,PHP 带有一个易于使用的函数来解析 JSON。你可以试试这个:

<?
$dat = "file.dat";
$text = file_get_contents($dat);
$res = json_decode($text, true);
if ($res) {
    foreach ($res as $key => $value) {
        echo "$key => $value";
    }
}
    else {
    echo "No Data Found.";
}

未经测试,但应该可以完成工作。

【讨论】:

  • 只是回应“未找到数据”
  • 您可以通过添加行 var_dump($rest); 来分析 $res 中保存的内容。在 if 语句之前。它应该告诉您它的数组及其内容。如果它不发表评论。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多