2017-02-21 63 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你为什么使用懒惰的'。*?'? '。*'永远不能超过'$'(除非与单行修饰符一起使用,在这里显然不是这样) –