我得到一个正则expression头痛,所以希望有人能帮助我在这里。 我正在做一些文件语法转换,我在文件中有这种情况:
OpenMarker keyword some expression keyword some expression keyword some expression keyword some expression keyword some expression CloseMarker
我想匹配标记内的“关键字”的所有实例。 标记区域重复,关键字可以出现在其他地方,但我不想匹配的标记之外。 我似乎无法解决的是如何得到一个正则expression式来取消所有的比赛。 我可以得到一个做第一个或最后一个,但不能得到所有的人。 我相信这应该是可能的,这是重复捕捉小组可以做的 – 有人能让我看到光?
我正在使用grepWin,这似乎支持所有的花里胡哨。
你可以使用:
(?<=OpenMarker((?!CloseMarker).)*)keyword(?=.*CloseMarker)
这将匹配OpenMarker
和CloseMarker
中的keyword
(使用“dot matches newline”选项)。
sed -n -e '/OpenMarker[[:space:]]*CloseMarker/p' /path/to/file | grep keyword
sed -n -e '/OpenMarker[[:space:]]*CloseMarker/p' /path/to/file | grep keyword
应该工作。 不知道如果单独的grep
可以做到这一点。
只有几个正则表达式引擎支持重复组(例如.NET)的单独捕获。 所以你最好的选择是分两步做到这一点:
首先匹配您感兴趣的部分: OpenMarker(.*?)CloseMarker
(使用选项“dot matches newline”)。
然后重复应用另一个正则表达式: keyword (.*)
(这次没有“dot matches newline”选项)。