2017-02-21 4 views
2

Ich habe versucht, dies für eine Stunde jetzt zu arbeiten, aber kann es nicht scheinen, weder mit Hilfe von SO Artikel oder Regex101.com.Regex inverse Übereinstimmung für die ganze Zeile

Habe einige Daten und möchte die Zeilen zurückgeben, die nicht "/ Common/http" enthalten. Beispieldaten:

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

Das Ergebnis ich suche ist:

/Common/http-mymon 
another line 

Jede regex ich muss die ganze Linie übereinstimmen oder nicht im Motor Ich benutze (https://github.com/jayway/JsonPath). Dies bedeutet, dass http würde nicht funktionieren, aber .*http.* würde.

Hoffe, das ist ziemlich klar?

/Patrik

+1

Aber '/ Common/http-Mymon' enthält '/ Common/http', könnten Sie bitte klären? –

+0

Vielen Dank für Ihren Kommentar. Tatsächlich tut es das. Aber ich möchte nur dieses bestimmte "Wort" zusammenbringen. Ich habe eine Regex, die ich benutze, um die Zeilen zu finden, die es übereinstimmen, wenn das Dinge klarstellt. * \/Common \/http (?! \ S). * '? – PatrikJ

Antwort

2

Sie können eine negative Vorschau Regex wie folgt verwenden:

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

RegEx Demo


Update:

Wie pro Kommentar unten OP will Ausschließen /Common/http gefolgt von / oder einem Leerzeichen. In diesem Fall versuchen, diese Regex:

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

RegEx Demo 2

+0

Vielen Dank für Ihre Antwort. Ja, aber http-mymon könnte alles Mögliche sein, während dies in den von mir bereitgestellten Daten funktionieren könnte, würde es für andere Kombinationen nicht funktionieren. Ich möchte nur/Common/http, als ein Wort ausschließen. – PatrikJ

+0

@PatrikJ verwenden^(?:. *?/Common/http \ S + | (?!. */Allgemein/http)). * $ – radicarl

+1

@PatrikJ: In diesem Fall versuchen: '^ (?!. */Common/http (?:/| \ s)). * $ ' – anubhava

1

ich glaube, Sie mit den folgenden regex

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

Dieses ohne /Common/http vor, bevor Raum negative Vorschau verwendet, ist die Überprüfung gehen (?!.*\/Common\/http(?:\s))

+0

Vielen Dank für Ihre Antwort. Fast da, aber "eine andere Linie" wurde nicht mit dieser Kombination abgestimmt. – PatrikJ

+1

Es sollte übereinstimmen. Sie können hier sehen https://regex101.com/r/D6BgJ8/1 –

+1

@SabujHassan warum verwenden Sie die faulen '. *?'? '. *' kann niemals '$' überschreiten (außer bei Verwendung mit einem einzelnen Zeilenmodifikator, was hier eindeutig nicht der Fall ist) –

Verwandte Themen