匹配所有出现的单个或正则表达式

时间:2017-10-09 09:06:35

标签: regex

我需要找到匹配两者的正则表达式:

;hostname:MytestHello;

;message:#Hellowtestworld;

在此值中:

;hostname:MytestHello;severity:major;message:#Hellowtestworld;

这是我的正则表达式:

(hostname:|message:).*?(test).*?\;

但我只是第一次出现:

hostname:nimsofttest22;

为了获得 BOTH 结果,我该怎么办?

1 个答案:

答案 0 :(得分:0)

虽然使用全局修饰符或返回多个匹配项的正确语言函数/方法很容易解决多个匹配部分,但您的模式包含一个缺陷:如果message或{{1},它可能会返回不需要的结果} {没有hostname后,test出现在另一次出现之前。请参阅this regex demo to understand what I mean

所以,正确的方法是在这里限制test,以匹配除.之外的任何字符(在字符串中充当分隔符):

;

请参阅this regex demo

注意:您应该调整后面将在代码中选择的任何语言方法//函数的模式。

<强>详情

  • /(?:hostname|message):[^;]*?test[^;]*;/g - 2个子串中的任何一个
  • (?:hostname|message) - 冒号
  • : - [^;]*?以外的任何0 +字符,尽可能少
  • ; - test
  • test - 尽可能多的[^;]*以外的任何0 +字符
  • ; - 一个分号。