2017-05-26 2 views
0

Ich habe eine Zeichenfolge wie folgt.RegEx Overlapping String

[system]a[/system][system]b[/system][system]c[/system]

Ich möchte Werte zurück zwischen [System] und [/ System] Tags.

Also für dieses Beispiel sollte es a, b, c zurückgeben. (mit preg_match_all Funktion in PHP)

Ich habe versucht, dieses Muster \[system\](.*)\[\/system\] zu verwenden, aber es gibt a[/system][system]b[/system][system]c zurück.

Es dauert einfach das erste öffnende Tag und endet mit dem letzten schließenden Tag.

Wie kann ich das tun?

+0

Fügen Sie ein '' '' date ändern '(. *)' Zu nicht-gierigen '(. *?)' – degant

+0

@degant Danke, es hat funktioniert. Sie sollten dies in den Antworten posten. –

Antwort

1

Machen Sie Ihren Quantor nicht gierig (widerwillig). Fügen Sie einen ? wie folgt aus:

(.*?) 

Diese die Regex anweisen wird so wenig wie möglich anzupassen, anstatt gierig und so viele wie möglich entsprechen.