我试图自己解决这个问题,但我需要一些帮助。
我有一个强大的位于我的系统日志中 - 虽然我知道grep会更容易,但我有理由构建正则表达式。
例如:somerandomstufffilter-category=Web_Advertisements|andhereis more random stuff
在那乱糟糟的混乱中,有一个确切的字符串'filter-category=Web_Advertisements|'
我创建了这个正则表达式:(filter-category=).*?(?=["|"])
它会拉出我想要的确切字符串,直到管道。而不是给我整个字符串,我只想在等号后面的所有内容(并不包括在我的匹配中),以及管道之前。
现在我得到:'filter-category=Web_Advertisements'
我想得到的是:'Web_Advertisements'
本身。诀窍在于,无论是过滤类别,都可以是任何东西,而不仅仅是网络广告。这就是为什么它必须以它遇到的第一个管道结束。
答案 0 :(得分:2)
filter-category=
,因此请删除()
。(?=...)
。["|"]
来滥用字符类 - 这意味着您要匹配双引号"
或管道|
。这是你想要的:
filter-category=(.*?)\|
答案 1 :(得分:0)
acheong87的答案可能包括捕获中的管道......如果它是贪婪的并且有多个管道,它将捕获到最后一个管道的所有内容。
尝试
filter-category=([^\|]*)\|
与acheong87的答案一样,这将匹配
的整个过滤器类别= Web_Advertisements |
您必须从中提取要保留的部分,并将其捕获到$ 1