2017-02-21 60 views
2

我一直試圖讓這個工作一個小時,但似乎無法做到這一點,沒有SO文章或Regex101.com的幫助。整行正則表達式逆匹配

已經有一些數據並希望返回不包含「/ Common/http」的行。示例數據:

/Common/http and /Common/Another 
/Common/http-mymon 
/Common/another /Common/http 
another line 

我找的結果是:

/Common/http-mymon 
another line 

任何正則表達式我使用必須整行匹配,或在我用發動機(https://github.com/jayway/JsonPath)失敗。這意味着http將不起作用,但.*http.*會。

希望這個很清楚嗎?

/帕特里克

+1

但'/ Common/http-mymon'包含'/ Common/http',請您澄清一下嗎? –

+0

感謝您的評論。確實如此。但我只想匹配那個特定的「單詞」。我有一個正則表達式,我用它來查找符合條件的行,如果這樣可以澄清事情'。* \/Common \/http(?!\ S)。*'? – PatrikJ

回答

2

可以使用負前瞻正則表達式是這樣的:

^(?:.*?/Common/http-mymon|(?!.*/Common/http)).*$ 

RegEx Demo


更新:

按評論下方OP希望排除/Common/http後跟/或空格。在這種情況下,試試這個正則表達式:

^(?!.*/Common/http(?:/|\s)).*$ 

RegEx Demo 2

+0

謝謝你的回答。是的,但http-mymon可以是任何東西,雖然這可能在我提供的特定數據中工作,但它不適用於其他組合。我只是想把/ Common/http排除在外。 – PatrikJ

+0

@PatrikJ使用^(?:。*?/ Common/http \ S + |(!!。*/Common/http))。* $ – radicarl

+1

@PatrikJ:在這種情況下,請嘗試:'^(?!。*/Common/http(?:/ | \ s))。* $' – anubhava

1

我想你可以用下面的正則表達式

^(?!.*\/Common\/http(?:\s))(.*?)$ 

這個人是沒有/Common/http在前面空間之前,使用負先行(?!.*\/Common\/http(?:\s))檢查去

+0

謝謝你的回答。幾乎在那裏,但「另一條線」與這個組合不匹配。 – PatrikJ

+1

它應該匹配。你可以在這裏看到https://regex101.com/r/D6BgJ8/1 –

+1

@SabujHassan你爲什麼使用懶惰的'。*?'? '。*'永遠不能超過'$'(除非與單行修飾符一起使用,在這裏顯然不是這樣) –