如何用正则从XML文件中提取HTTP链接?
提取XML中href属性的URL(egrep解决方案)
我来帮你搞定这个XML链接提取的问题~你之前的正则没达到预期,主要是两个问题:
- 你的正则里写了
http://www\.\.com,但你的目标链接是store.vcenter.com,这部分匹配规则完全不对; [^<]+会匹配从匹配起始点到第一个<的所有内容,自然会包含引号和XML标签的收尾部分。
正确的egrep解决方案
针对你这种单行的XML标签,我们可以精准匹配href属性里的URL内容,有两种靠谱的方式:
方式1:分步提取(兼容所有egrep版本)
先匹配包含URL的整个href="..."片段,再提取其中的URL部分:
egrep -o 'href="http[^"]+"' your_file.xml | egrep -o 'http[^"]+'
- 第一部分
href="http[^"]+":匹配以href="http开头,直到闭合引号的整个属性片段; - 第二部分
http[^"]+:从片段里提取真正的URL,只保留从http开始到引号前的内容。
方式2:用正向预查(部分egrep版本支持)
如果你的egrep支持正向零宽断言,可以一步到位提取:
egrep -o '(?<=href=")http[^"]+' your_file.xml
(?<=href=")是正向预查,它会确保我们要匹配的内容前面刚好是href=",但不会把这部分包含在最终输出里;http[^"]+负责匹配完整的URL,直到遇到第一个引号为止,完美避开多余内容。
小提醒
如果你的XML结构比较复杂(比如属性值里有转义引号、标签跨行等),正则可能会失效,这时候更推荐用专门的XML解析工具,比如xmllint或者Python的xml.etree模块来处理,不过对于你现在这种简单的单行标签场景,上面的正则完全够用啦。
内容的提问来源于stack exchange,提问作者Test45
相关产品推荐
相关产品推荐

