【发布时间】:2011-10-02 09:09:49
【问题描述】:
我正在使用 Ubuntu 10.10 并使用 Grep 处理一些 HTML 文件。
这里是 HTML sn-p:
<a href="video.php?video=one-hd.mov"><img src="/1.jpg"><a href="video.php?video=normal.mov"><img src="/2.jpg"><a href="video.php?video=another-hd.mov">
我想提取one-hd.mov 和another-hd.mov 但忽略normal.mov。
这是我的代码:
example='<a href="video.php?video=one-hd.mov"><img src="/1.jpg"><a href="video.php?video=normal.mov"><img src="/2.jpg"><a href="video.php?video=another-hd.mov">'
echo $example | grep -Po '(?<=video.php\?video=).*?(?=-hd.mov">)'
结果是:
one
normal.mov"><img src="/2.jpg"><a href="video.php?video=another
但我想要
one
another
那里不匹配。
是不是因为所谓的Greedy正则表达式?
我正在使用 GREP,但欢迎使用任何命令行 bash 工具来解决此问题,例如 sed 等。
非常感谢。
【问题讨论】:
-
按照通常的答案,永远不要尝试将 HTML 与正则表达式匹配:stackoverflow.com/questions/1732348/…
-
@Marc B 那么我应该使用什么来处理 HTML。实际上 Grep if gr8 用于 HTML 处理。
-
Grep 非常适合查找东西。但唯一能正确处理 HTML 的是 DOM 解析器。其他任何东西都会在某个时候转身咬你。
标签: regex linux bash command-line grep