【发布时间】:2015-08-16 18:59:30
【问题描述】:
我有一个 tsv 文件,里面有很多 HTML。
我需要在非 .jpg 链接的 href 属性的最后一个正斜杠之后替换 %20。
我正在命令行上尝试使用 Perl,我需要正则表达式方面的帮助。
我尝试了一些正则表达式,这是在现场测试中(下面的链接):
<a\ [^>]*href="([^"]+(%20)+)[^\.jpg][^\/]"[^>]?>
它只匹配一个<a> 标签并且只捕获最后一次出现的%20。
Here a live test with a sample of tsv.
我可以:
<a href="http://example.com/path/to-some-folder/another%20folder/one%20more520folder/34%20-%20kv34%20-%20tomba%20di%20thumtmose%20iii">text</a>
我必须匹配最后一个正斜杠之后的所有%20,并将它们替换为-。
或:
<a href="http://example.com/path/to-some-folder/another%20folder/one%20more520folder/uploads/2012/02/some%20folder/another%20folder/09%20antichi%20egizi%20-%20Tomba%20di%20Tutankhamen.jpg"> <img border="0" src="http://example.com/path/to-some-folder/another%20folder/one%20more520folder/uploads/2012/02/some%20folder/another%20folder/09%20antichi%20egizi%20-%20Tomba%20di%20Tutankhamen%20ante.jpg" width="80" height="92" alt="09 antichi egizi - Tomba di Tutankhamen" /></a>
我不得匹配 .jpg 的 href 属性,因此上面的最后一个示例需要保持不变。
我也试过这个匹配所有预期的<a> 标签,但我不知道如何在最后一个斜杠之后仅捕获所有%20 以随后应用替换:
<a [^>]*href="([^"]+)[^\.jpg][^\/]"[^>]?>
【问题讨论】:
-
您需要使用 HTML 解析器仅提取 a 标签的 href 属性。 Obligatory link
-
[^\.jpg]这并不意味着你认为它是什么.. -
嘿 karthik - 如果我昨天从你的正则表达式中正确学习 - 它可能是 (?!\.jpg)。
-
@Falt4rm 是的......它可能是......
-
@glenn jackman,谢谢你的链接,我是 Kaitlin Duck Sherwood,他准确地解释了我现在需要什么。
标签: regex bash perl replace command-line