使用preg_replace()隔离源代码中的数字

时间:2016-01-21 00:24:49

标签: php preg-replace file-get-contents

我正试图从我提取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;
?>

非常感谢任何帮助。

1 个答案:

答案 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