【发布时间】:2019-11-10 08:54:24
【问题描述】:
所以我有这个 xml 行示例,正在从中读取,
<element attr1=”XX” attr2=”0818820\.x11” attr3=”YYXX.x11” attr-4=”1”/>
由于是xml,所以元素的顺序是随机的,有些可能是可选的。
所以我尝试使用 awk 选择其中一个,例如使用 gensub 的 attr1。
while (getline < "./file") {
print $0
#First attempt
#print gensub(/.*attr1=\"(.*)\".*/,"\\1","g",$0)
#Second attempt
print gensub(/.*attr1="(.*)".*/,"\\1","g",$0)
}
但是,我没有设法匹配这个,但返回了整行(可能没有匹配,但它也可以匹配所有)。有人有想法吗?我将无法修改输入参数。
BR 帕特里克
【问题讨论】:
-
正则表达式在修改 xml/html 数据时永远不会是健壮和合适的
-
@WiktorStribiżew 这些解决方案仅在 xml 行是单行时才有效。
-
有人称它为summoning the daemon,其他人称它为the Call for Cthulhu,很少有人称它为turned mad and met the Pony。简而言之,永远不要使用正则表达式解析 XML 或 HTML!您是否尝试过诸如
xmlstarlet、xmllint或xsltproc之类的 XML 解析器? -
@kvantour 没错,仅用于示例字符串。否则使用
awk/sed等就没有意义了 -
You can't parse [X]HTML with regex。我建议使用 XML/HTML 解析器(例如 xmlstarlet)。