如何通过正则表达式收集 HTML 链接中的文本?
Posted
技术标签:
【中文标题】如何通过正则表达式收集 HTML 链接中的文本?【英文标题】:How to gather the text inside HTML-links via regular expression? 【发布时间】:2019-08-09 04:12:39 【问题描述】:我有一个带有链接的字符串(如 html 中的无序列表 (<li>
) 中的a
-元素)。如何使用正确的正则表达式进行解析?
我需要得到这个值的数组:
[
"Керамическая плитка",
"Напольные покрытия"
]
基础 HTML(示例):
<li><a href="/plitka/">Керамическая плитка</a></li>
<li><a href="/napolnye-pokrytiya/">Напольные покрытия</a></li>
<li><a href="/oboi/">Обои</a></li>
<li><a href="/mebel-dlia-vannoi/">Мебель для ванной</a></li>
<li><a href="/santehnika/">Сантехника</a></li>
非常感谢。非常感谢您的帮助!
【问题讨论】:
欢迎来到 Stack Overflow。请阅读如何提供Minimal, Complete, and Verifiable example 您还可以从How to ask 和What is expected of SO users 中受益 嗨,欢迎来到 Stack Overflow。您能否编辑您的问题以澄清一下。请包含您的相关 php 代码,并准确说明(如果代码没有)您正在解析的内容。另外请解释为什么 css 是相关的或删除该标签。谢谢。 您是否要获取每个<a>
标签的值?例如,“解析”<li><a href="/plitka/">Керамическая плитка</a></li>
会给你Керамическая плитка
?
解析它们是为了什么?当涉及到您实际询问的内容时,您需要明确说明。
只是一个注释。如果需要解析 HTML,you shouldn't use regular expressions。请改用DOMDocument 之类的东西。
【参考方案1】:
解析器是您应该使用的工具,而不是正则表达式。像这样的:
<?php
$links = '<li><a href="/plitka/">Керамическая плитка</a></li>
<li><a href="/napolnye-pokrytiya/">Напольные покрытия</a></li>
<li><a href="/oboi/">Обои</a></li>
<li><a href="/mebel-dlia-vannoi/">Мебель для ванной</a></li>
<li><a href="/santehnika/">Сантехника</a></li>';
$dom = new domdocument();
$dom->loadhtml('<?xml encoding="utf-8" ?>' . $links);
$links = $dom->getelementsbytagname('a');
foreach($links as $link)
echo $link->nodeValue . PHP_EOL;
可以检索a
的节点值。如果路径更具体,请使用xpath
。
https://3v4l.org/b1lKZ
【讨论】:
我不能使用解析器工具,它不在php中。所以我想为此目的编写正则表达式?我该怎么做? @StephanGolubev 您使用的是什么 PHP 版本?domdocument
应该在那里,php.net/manual/en/class.domdocument.php
抱歉,我会检查一下。
@user3783243 - DOMDocument 依赖于在许多系统上默认未安装/启用的 xml 扩展。例如,我认为您通常需要在 Ubuntu 上手动安装它。
@StephanGolubev - 为什么不能安装/启用 xml 扩展?你基本上是在说你不能使用正确的工具来完成这项工作。以上是关于如何通过正则表达式收集 HTML 链接中的文本?的主要内容,如果未能解决你的问题,请参考以下文章