我正在尝试找到一个(sed样式)正则表达式,它将匹配单词“HAWK”的每个实例和最接近的周围项目标签,即<item> ... HAWK ... </item>
,其中省略号可以是文本或其他标签(但不是项目标签)。
到目前为止,我已尝试过lazy match-all:<item>(.*?)HAWK(.*?)<\/item>
,并发现这适用于捕获HAWK和结束项标记之间的所有内容,但匹配多个嵌套的开放<item>
标记,结果太多了。
我认为使用后视可能有所帮助,但我也遇到了让它正常工作的问题。任何帮助将不胜感激。
答案 0 :(得分:0)
为了使用sed
样式表达式找到“最接近的标记”,您可以尝试
/<item>[^>]*HAWK[^<]*<\/item>\)/
这适用于'常规sed'。基本上,通过匹配HAWK之前不是右括号的任何东西,以及HAWK之后不是开始括号的任何东西,它'模拟'非贪心量词.*?
。
但尝试使用正则表达式解析XML等通常不是一个好主意 - “真正的解析器”更加健壮。但是,嘿,你问。