2017-08-02 3 views
0

Ich versuche, den gesamten Text zwischen zwei Zeichen zu finden, aber manchmal enthält die Zeichenfolge das Trennzeichen.Regex Quantoren - so viele zwischen zwei Zeichen

Zum Beispiel, wenn ich

(.*?)=(.*?),* 

Auf der folgenden Zeichenkette verwenden:

color=blue,weight=100kg, 

Es ergeben:

match #1: color=blue 
match #2: weight=100kg 

Allerdings, wenn ich die folgende Zeichenfolge haben:

color=blue,red,weight=100kg, 

Es ergeben:

match #1: color=blue 
match #2: red,weight=100kg 

Wie kann ich die Regex zurückgeben folgendes machen? (Schneiden Sie die Zeichenfolge im letzten Auftreten des Kommazeichens)

match #1: color=blue,red 
match #2: weight=100kg 

Bitte beachten Sie, dass die Menge der Farben, die durch ein Komma getrennt könnte mehr als 3 sein, oder gar keine.

Vielen Dank im Voraus,

+0

statt den Punkt der Verwendung des Schlüssels zu beschreiben, eine Zeichenklasse verwenden, die das Komma (, und das Gleichheitszeichen zu) ausschließt. –

Antwort

1

Sie könnten diese regex verwenden:

[^,]+=[^=]+(?=,) wo

[^,]+ - Parametername

- dies wird Parameterwert erfassen, der erlaubt, alles zu enthalten, aber = Symbol und sollte mit Komma enden.

regex101 example

+0

Funktioniert perfekt. Ich werde es studieren, damit ich es vollständig verstehe. Vielen Dank! –

+0

so '([^,] + = [^ =] + (? =,)), (. *) ' –

1

Herumspielen mit negierten Zeichenklassen ein wenig, sollten Sie es passend sein können mit

[^=,]+=(?:[^=,]+|,(?![^,=]+=))+ 

Diese

  • [^=,]+ alles passt, die kein Komma ist oder =
  • = die folgenden =
  • (?:[^=,]+|,(?=[^,=]+,))+ alles, was nicht ein Komma oder ein Komma ist, die nicht direkt von = ohne toher Komma dazwischen folgt - wiederholt so oft wie möglich

Siehe https://regex101.com/r/p8Bz9o/1

+0

Funktioniert auch einwandfrei. Vielen Dank! –

Verwandte Themen