我正在接受正则表达式的头痛,所以希望有人可以帮助我。我正在进行一些文件语法转换,我在文件中遇到了这种情况:
OpenMarker
keyword some expression
keyword some expression
keyword some expression
keyword some expression
keyword some expression
CloseMarker
我希望匹配标记内的所有“关键字”实例。重复标记区域,关键字可以出现在其他地方,但我不想在标记之外匹配。我似乎无法解决的是如何获得正则表达式以取出所有匹配。我可以让一个人做第一个或最后一个,但不是为了得到所有这些。我相信它应该是可能的,它与重复的捕获组有关 - 有人能告诉我光明吗?
我正在使用grepWin,它似乎支持所有的花里胡哨。
答案 0 :(得分:3)
您可以使用:
(?<=OpenMarker((?!CloseMarker).)*)keyword(?=.*CloseMarker)
这将匹配keyword
和OpenMarker
内的CloseMarker
(使用“点匹配换行”选项)。
答案 1 :(得分:0)
sed -n -e '/OpenMarker[[:space:]]*CloseMarker/p' /path/to/file | grep keyword
应该有效。不确定grep
是否可以做到这一点。
答案 2 :(得分:0)
只有少数正则表达式引擎支持重复组的单独捕获(例如.NET)。因此,最好的办法是分两步完成:
首先匹配您感兴趣的部分:OpenMarker(.*?)CloseMarker
(使用“dot match newline”选项)。
然后重复对匹配应用另一个正则表达式:keyword (.*)
(这次没有选项“dot match newline”)。