匹配包含密钥的标签之间的所有内容

时间:2014-02-05 03:18:52

标签: regex

我正在尝试找到一个(sed样式)正则表达式,它将匹配单词“HAWK”的每个实例和最接近的周围项目标签,即<item> ... HAWK ... </item>,其中省略号可以是文本或其他标签(但不是项目标签)。

到目前为止,我已尝试过lazy match-all:<item>(.*?)HAWK(.*?)<\/item>,并发现这适用于捕获HAWK和结束项标记之间的所有内容,但匹配多个嵌套的开放<item>标记,结果太多了。

我认为使用后视可能有所帮助,但我也遇到了让它正常工作的问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为了使用sed样式表达式找到“最接近的标记”,您可以尝试

/<item>[^>]*HAWK[^<]*<\/item>\)/

这适用于'常规sed'。基本上,通过匹配HAWK之前不是右括号的任何东西,以及HAWK之后不是开始括号的任何东西,它'模拟'非贪心量词.*?

但尝试使用正则表达式解析XML等通常不是一个好主意 - “真正的解析器”更加健壮。但是,嘿,你问。