如何通过正则表达式收集 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 是相关的或删除该标签。谢谢。 您是否要获取每个&lt;a&gt; 标签的值?例如,“解析”&lt;li&gt;&lt;a href="/plitka/"&gt;Керамическая плитка&lt;/a&gt;&lt;/li&gt; 会给你Керамическая плитка? 解析它们是为了什么?当涉及到您实际询问的内容时,您需要明确说明。 只是一个注释。如果需要解析 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 链接中的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过正则表达式识别文本中的段落?

正则则表达式大全(收集)

js 正则验证正整数

Python:使用JSON API链接通过正则表达式显示命名捕获组

Python 网络爬虫(新闻收集脚本)

正则表达式通过 HTML 限制文本框中的输入 [重复]