How to get span tag content using preg_match function?(如何使用preg_Match函数获取span标签内容?)
本文介绍了如何使用preg_Match函数获取span标签内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下HTML代码:
<span role="button" class="a-n S1xjN" tabindex="0">414,817 people</span>
如何使用preg_match
函数获取414817
号?
推荐答案
更好的解决方案
正则表达式在这里是错误的工具。HTML值not a regular language,无法使用正则表达式进行准确解析。改用DOM解析器。它不仅简单得多,而且更准确、更可靠,并且不会在未来标记格式发生变化时中断。
这就是如何使用PHP的内置DOMDocument类获取<span>
标记内的内容:
$dom = new DOMDocument;
$dom->loadHTML($yourHTMLString);
$result = $dom->getElementsByTagName('span')->item(0)->nodeValue;
如果有多个标记,并且您想要从所有标记中获取节点值,则只需使用foreach
循环,如下所示:
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('span') as $tag) {
echo $tag->nodeValue . '<br/>';
}
最后,要仅从节点值中提取数字,您有几个选项:
// Split on space, and get first part
echo explode(' ', $result, 2)[0];
// Replace everything that is not a digit or comma
echo preg_replace('/[^d,]/', '', $result);
// Get everything before the first space
echo strstr($result, ' ', 1);
// Remove everything after the first space
echo strtok($result, ' ');
所有这些语句都将输出414,817
。有一整套string functions可供您使用,您可以选择一个适合您需求的解决方案。
基于Regex的解决方案
如果您绝对必须使用preg_match()
,则可以使用以下内容:
if (preg_match('#<span[^<>]*>([d,]+).*?</span>#', $result, $matches)) {
echo $matches[1];
}
[^<>]*
表示匹配任意数量的字符(尖括号除外),以确保我们不会意外中断我们所在的标记。
.*?
(请注意?
)表示匹配任意数量的字符,但只能匹配尽可能少的&qot;。这避免了从标记中的第一个到最后一个<span>
标记进行匹配(如果有多个<span>
)。
我绝对不能保证regex将始终工作,但对于那些想要完成一次性工作的人来说,它应该足够了。在这种情况下,最好使用一个适用于正常情况的正则表达式,而不是为事情不是普遍完美而哭泣:)
这篇关于如何使用preg_Match函数获取span标签内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用preg_Match函数获取span标签内容?
基础教程推荐
猜你喜欢
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01