我正试图从我提取YouTube的网页的源代码中挑选一个值(在本例中,值为544007664)。现在,我所拥有的脚本已成功从YouTube页面加载源代码并删除"<"和">"符号,以便当我回显源代码时,它显示为文本,并且不显示页面本身。两个preg_replace()函数(这里是第4行和第5行)在所需值之前和之后拉出所有内容都没有按照我的预期进行。
我唯一能想到的是preg_replace()拒绝读取单个字符串文本,实际上是几十个单独的行。
<?php
$str = file_get_contents('https://www.youtube.com/watch?v=5XR7naZ_zZA');
$str = $str;
$str = preg_replace('~^(.)+(meta name="twitter:app:id:ipad" content=")~', '', $str);
$str = preg_replace('~(" meta name="twitter:app:url:iphone")+(.)$~', '', $str);
$str = preg_replace('~<~', '', $str);
$str = preg_replace('~>~', '', $str);
echo $str;
?>
非常感谢任何帮助。
答案 0 :(得分:0)
我认为你在这个问题上处于正确的轨道上,但是有点过分思考。
这是一个简单的摘录,您可以使用它来获取数字:
$str = file_get_contents('https://www.youtube.com/watch?v=5XR7naZ_zZA');
$app_store_id = preg_replace('~.*?<meta property="al:ios:app_store_id" content="(\d+)">.*~si', '$1', $str);
print $app_store_id;
输出:
544007664
以下是正则表达式的解释:
.*?
- 匹配任何字符.
,任意次数*
,直到它到达正则表达式字符串?
的下一部分。下一部分是我们正在寻找的特定<meta ...
标记。<meta property="al:ios:app_store_id" content="
- 这只是使用&#34; app_store_id&#34;找到元标记。在它。(\d+)
- 这至少抓取一个+
数字\d
。我们将它放在括号中,因为它将被分配到$1
。我们将使用$1
的值来替换字符串的内容。 (所以我们只用我们找到的号码替换整个网页。)">
- 完成元标记。.*
- 在元标记后的任意次数.
匹配任何字符*
。请注意,我在表达式后使用s
标志将换行符计为字符。这将有效地让您跨多行搜索。通常,s
标记与m
标记配对,但在这种情况下,它不是必需的。
这是指向可以在PHP中使用的不同标志的页面的链接。
http://php.net/manual/en/reference.pcre.pattern.modifiers.php