使用 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
我试图从我从 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