【问题标题】:Preg_match_all Multiple ContentPreg_match_all 多个内容
【发布时间】:2019-03-26 15:49:42
【问题描述】:

我想使用 preg_match_all 函数从站点获取多个数据。但是当我使用这个正则表达式命令(。*?)多个时,该功能不起作用。

这不是 json。我从任何 Instagram 个人资料的源代码中获取数据。例如:view-source:https://www.instagram.com/ziynetaki 打开链接可以看到以下代码。脚本类型="text/javascript">window._sharedData = .....

我试过了:

$display = '#__typename":"GraphImage","id":"(.*?)","edge_media_to_caption":{"edges":[{"node":{"text":"(.*?)"}}]},"shortcode":"(.*?)","edge_media_to_comment":{"count":(.*?)},"comments_disabled":false,"taken_at_timestamp":(.*?),"dimensions":{"height":(.*?),"width":(.*?)},"display_url":"(.*?)","edge_liked_by"#i';

preg_match_all($display, $url, $dop);
print_r($dop);

输出为空:

Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) [5] => Array ( ) [6] => Array ( ) [7] => Array ( ) )

有人可以帮我做这件事吗?我搜索了很多解决方案,但找不到任何信息。由于我的英语不是很好,所以我不知道如何在互联网上搜索,谢谢。

【问题讨论】:

  • 你输入的字符串是什么? (似乎是 JSON)
  • #i 替换为#si. 默认不匹配换行符。
  • @WiktorStribiżew 我想说:使用 json_decode() 而不是使用 RegEx 解析 JSON
  • @WiktorStribiżew 因为我知道你有点太喜欢 RegEx 并且看起来你在邀请 OP 继续尝试使用 RegEx 而不是正确的方式
  • 我从不使用正则表达式解析 JSON。

标签: php regex preg-match-all


【解决方案1】:

您的正则表达式模式有一个小错误,导致您的匹配失败。

您的正则表达式在这部分 {"edges":[{"node" 中有一个 [ 字符,您没有转义它,因此它表现为一个字符集并破坏了您的正则表达式的预期含义。

只是转义 [ 会使您的模式开始匹配并给出预期的结果。此外,如果您的输入跨越多行,您可以启用 DOTALL 模式以使 . 匹配新行,但目前您的输入字符串不需要这样做并且可以正常工作。

Check here

检查您的 PHP 代码,

$url = '"edges":[{"node":{"__typename":"GraphImage","id":"1998193948597745904","edge_media_to_caption":{"edges":[{"node":{"text":"test"}}]},"shortcode":"Bu7As8ygPjw","edge_media_to_comment":{"count":0},"comments_disabled":false,"taken_at_timestamp":1552423302,"dimensions":{"height":216,"width":320},"display_url":"https://instagram.fdel1-4.fna.fbcdn.net/vp/b26fc82649aebaba80ff8750844d9476/5D32EFAE/t51.2885-15/e35/52508202_381950182383672_2887085630092404003_n.jpg?_nc_ht=instagram.fdel1-4.fna.fbcdn.net","edge_liked_by":{"count":6},"edge_media_preview_like":{"count":6}';
$display = '#__typename":"GraphImage","id":"(.*?)","edge_media_to_caption":{"edges":\[{"node":{"text":"(.*?)"}}]},"shortcode":"(.*?)","edge_media_to_comment":{"count":(.*?)},"comments_disabled":false,"taken_at_timestamp":(.*?),"dimensions":{"height":(.*?),"width":(.*?)},"display_url":"(.*?)","edge_liked_by"#i';

preg_match_all($display, $url, $dop);
print_r($dop);

打印所有你想要的捕获,

Array
(
    [0] => Array
        (
            [0] => __typename":"GraphImage","id":"1998193948597745904","edge_media_to_caption":{"edges":[{"node":{"text":"test"}}]},"shortcode":"Bu7As8ygPjw","edge_media_to_comment":{"count":0},"comments_disabled":false,"taken_at_timestamp":1552423302,"dimensions":{"height":216,"width":320},"display_url":"https://instagram.fdel1-4.fna.fbcdn.net/vp/b26fc82649aebaba80ff8750844d9476/5D32EFAE/t51.2885-15/e35/52508202_381950182383672_2887085630092404003_n.jpg?_nc_ht=instagram.fdel1-4.fna.fbcdn.net","edge_liked_by"
        )

    [1] => Array
        (
            [0] => 1998193948597745904
        )

    [2] => Array
        (
            [0] => test
        )

    [3] => Array
        (
            [0] => Bu7As8ygPjw
        )

    [4] => Array
        (
            [0] => 0
        )

    [5] => Array
        (
            [0] => 1552423302
        )

    [6] => Array
        (
            [0] => 216
        )

    [7] => Array
        (
            [0] => 320
        )

    [8] => Array
        (
            [0] => https://instagram.fdel1-4.fna.fbcdn.net/vp/b26fc82649aebaba80ff8750844d9476/5D32EFAE/t51.2885-15/e35/52508202_381950182383672_2887085630092404003_n.jpg?_nc_ht=instagram.fdel1-4.fna.fbcdn.net
        )

)

Online PHP Demo

【讨论】:

  • 真的非常感谢你。这段代码运行良好。我很感谢你。 (拍,拍,拍.. 10 亿拍 :)))
  • 哈哈很高兴能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2014-06-11
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多