2017-10-09 19 views
1

我需要找到這二者匹配的正則表達式所有出現與之匹配的單個或正則表達式

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

這裏是我的正則表達式鏡頭:

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

但我只得到第一個發生:

hostname:nimsofttest22; 

我能做些什麼才能獲得BOTH結果?

+1

[您已經將兩者都匹配](https://regex101.com/r/DmLcZ8/1)與您的正則表達式模式。你使用JavaScript和forogt來使用'g'修飾符嗎?或者在Python中使用're.search'而不是're.finditer'?順便說一句,如果你的輸入是不同的,你可能得不到相同的結果。你最好使用['(?:hostname:| message:)[^;] *?test [^;] *;'](https://regex101.com/r/DmLcZ8/2)。如果你在前面需要'''',在模式開頭加上';?'。 –

+0

@WiktorStribiżew我正在使用regex101網站 – ohadinho

+0

現在我知道我需要改變爲全球。謝謝。 – ohadinho

回答

0

雖然多個匹配的部分很容易與一個全球性的改性劑或正確的語言功能/方法返回多個匹配來解決,你的模式包含一個漏洞:如果messagehostname它可能會返回不想要的結果,沒有test他們出現後在另一次出現之前test。見this regex demo to understand what I mean

所以,正確的做法是在這裏限制.,匹配任何字符,但;(即充當你的字符串分隔符):

/(?:hostname|message):[^;]*?test[^;]*;/g 

this regex demo

注意:您應該修改任何語言方法的模式//函數,您稍後將在代碼中選擇它。

詳細

  • (?:hostname|message) - 無論是2子
  • : - 一個冒號
  • [^;]*? - 比;其他任何0+字符,如儘可能
  • test - test
  • [^;]* - 除;之外的任何0+字符儘可能多
  • ; - 分號。