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

Use preg_replace() to Isolate Number in Source Code

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

非常感谢任何帮助。

我认为你在这方面走在正确的轨道上,但有点想多了。

这是一个简单的片段,您可以使用它来获取数字:

$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', '', $str); 

print $app_store_id;

这输出:

544007664

下面是对正则表达式的解释:

  • .*? - 匹配任何字符 .,任意次数 *,直到它命中正则表达式字符串的下一部分 ?。下一部分是我们正在寻找的特定 <meta ... 标签。
  • <meta property="al:ios:app_store_id" content=" - 这只是定位带有 "app_store_id" 的元标记。
  • (\d+) - 这至少抓取了一个 + 数字 \d。我们把它放在括号中,因为它会被分配给 </code>。我们将使用 <code> 的值来替换字符串的内容。 (所以我们只用找到的数字替换整个网页。)
  • "> - 完成元标记。
  • .* - 匹配任何字符 .,元标记后任意次数 *

请注意,我在表达式后使用 s 标志来使换行符算作一个字符。这将有效地让您搜索多行。通常,s 标志与 m 标志配对,尽管在这种情况下没有必要。

这是一个 link 页面,其中列出了您可以在 PHP 中使用的不同标志。

http://php.net/manual/en/reference.pcre.pattern.modifiers.php