2

我试图自己解决这个问题,但我需要一些帮助。

我的系统日志中有一个强大的功能 - 虽然我知道 grep 会更容易,但我有构建正则表达式的理由。

例如: somerandomstufffilter-category=Web_Advertisements|andhereis more random stuff

在那乱七八糟的混乱中,有一个确切的字符串'filter-category=Web_Advertisements|'

我创建了这个正则表达式: (filter-category=).*?(?=["|"])

它将我想要的确切字符串拉到管道上。而不是给我整个字符串,我只想要等号之后的所有内容(而不是将它包含在我的匹配中),并且在管道之前。

现在我得到: 'filter-category=Web_Advertisements' 我想要得到的是: 'Web_Advertisements'靠它自己。诀窍是过滤器类别之后的任何内容都可以是任何内容,而不仅仅是网络广告。这就是为什么它必须以它遇到的第一个管道结束。

4

2 回答 2

2
  1. 你不需要捕获filter-category=,所以放弃().
  2. 你不需要在这里使用前瞻,所以放弃(?=...).
  3. 顺便说一句,您通过编写误用了字符类["|"]——这意味着您将匹配双引号"或管道|

这就是你想要的:

filter-category=(.*?)\|
于 2013-01-02T16:14:09.087 回答
0

acheong87 的答案可能包括捕获中的管道......如果它是贪婪的并且有多个管道,它将捕获直到最后一个管道的所有内容。

尝试

filter-category=([^\|]*)\|

就像acheong87的回答一样,这将匹配整个

filter-category=Web_Advertisements|

您必须从中提取要保留的部分,捕获到 $1

于 2013-01-02T16:17:05.367 回答