regex - 从html页面中提取数据的正则表达式

标签 regex linux bash grep lynx

我想从 html 页面中提取所有 anchor 标记。我在 Linux 中使用它。

lynx --source http://www.imdb.com | egrep "<a[^>]*>"

但这并没有像预期的那样工作,因为结果包含不需要的结果

<a class="amazon-affiliate-site-name" href="http://www.fabric.com">Fabric</a><br>

我只想

<a href >...</a>

有什么好办法吗?

最佳答案

如果您的 grep 中有一个 -P 选项以便它接受 PCRE 模式,您应该能够使用更好的正则表达式。有时像 *? 这样的最小量词会有所帮助。此外,您将获得整个输入行,而不仅仅是匹配项本身;如果你有一个 -o grep 选项,它将只列出匹配的部分。

egrep -Po '<a[^<>]*>'

如果你的 grep 没有这些选项,试试

perl -00 -nle 'print $1 while /(<a[^<>]*>)/gi'

现在跨越线边界。

要对 HTML 进行真正的解析,需要的正则表达式比您希望在命令行上输入的要复杂得多。 Here’s one example , 和 here’s another .这些可能无法说服您尝试非正则表达式方法,但它们至少应该向您展示在一般情况下比在特定情况下更难。

这个答案说明了为什么 all things are possible, but not all are expedient.

关于regex - 从html页面中提取数据的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4977850/

相关文章:

linux - 如何使用awk计算输入的平均值?

python - 输出重定向到多个文件

linux - 在输出和捕获结果时在 bash 脚本中运行命令

java - 按空格分割但不换行

Linux组权限困惑

正则表达式查找丢失的 ConfigureAwait

使用 iconv() 将 UTF-16LE 转换为 UTF-8

c++ - linux/amd64 C 与 C++ 上的 abi 差异

java - xml 的正则表达式不起作用

java - 我需要检查字符串开头是否出现特定符号