我需要找到匹配两者的正则表达式:
;hostname:MytestHello;
;message:#Hellowtestworld;
在此值中:
;hostname:MytestHello;severity:major;message:#Hellowtestworld;
这是我的正则表达式:
(hostname:|message:).*?(test).*?\;
但我只是第一次出现:
hostname:nimsofttest22;
为了获得 BOTH 结果,我该怎么办?
答案 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 +字符;
- 一个分号。