正则表达式 - 在等号后和管道之前返回字符串

时间:2013-01-02 16:08:26

标签: regex

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

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

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

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

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

它会拉出我想要的确切字符串,直到管道。而不是给我整个字符串,我只想在等号后面的所有内容(并不包括在我的匹配中),以及管道之前。

现在我得到:'filter-category=Web_Advertisements' 我想得到的是:'Web_Advertisements'本身。诀窍在于,无论是过滤类别,都可以是任何东西,而不仅仅是网络广告。这就是为什么它必须以它遇到的第一个管道结束。

2 个答案:

答案 0 :(得分:2)

  1. 您无需捕获filter-category=,因此请删除()
  2. 您无需在此处使用前瞻,因此请放弃(?=...)
  3. 顺便说一下,您通过编写["|"]来滥用字符类 - 这意味着您要匹配双引号"或管道|
  4. 这是你想要的:

    filter-category=(.*?)\|
    

答案 1 :(得分:0)

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

尝试

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

与acheong87的答案一样,这将匹配

整个

过滤器类别= Web_Advertisements |

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