Regex Problem, sucht zu "weit"

08/31/2015 00:43 Krabat2#1
Hey ich habe einen Teil aus einem Quellcode mittels Regex extrahiert, möchte ich davon einen weiteren Teil extrahieren sucht regex zu "weit"

Quellcode-Ausschnitt:
PHP Code:
<div class='tab tlanes' show='._general'>General</div>
                    <
div class='tab tlanes' show='._top'>Top</div>
                    <
div class='tab tlanes' show='._mid'>Mid</div>
                    <
div class='tab tlanes' show='._jungler'>Jungler</div>
            </
div>
    <
div class='block3 _all'
Wenn ich mit = "<div class='tab tlanes' show='(\\n|.)*'>"; suche will ich dass dieser Teil extrahiert wird:
PHP Code:
[<div class='tab tlanes' show='._general'
jedoch wird einfach der ganze Code extrahiert da am Ende auch ein
PHP Code:
'> 
ist.

Kann ich irgendwie einstellen dass immer das erste "'>" genommen wird und nicht das letzte?
08/31/2015 07:46 Kaev <3#2
Der * macht deinen Regex "greedy". Das kannst du ändern, indem du hinter den Stern ein ? machst.
Müsste somit also so aussehen:
Code:
<div class='tab tlanes' show='(\\n|.)*?'>
08/31/2015 14:01 Krabat2#3
Funktioiert, aber wieso? Das "?" steht ja für 0 oder 1 meines Wissens. Aber es sind ja mehr Zeichen als 1. Erklärung wäre nett hast ein thx
08/31/2015 15:20 Padmak#4
Nein, wenn das ? hinter einem Zeichen wie "+" (1 oder mehr) oder "*" (0 oder mehr) steht, verändert das den Match-Modus von greedy (Den längst-möglichen Match) zu non-greedy (kurz-möglichster Match)

Padmak
08/31/2015 17:49 .SkyneT.#5
Ich empfehle dir für diese Aufgaben übrigens einen HTML/XML Parser, da
der Code dadurch viel einfacher zu verstehen und instand zu halten ist.
Empfehlenswert wäre hier libxml2.

Zu dem Thema fällt mir auch noch dieser Post auf stackoverflow ein:
[Only registered and activated users can see links. Click Here To Register...]
Finde den sehr unterhaltsam :)
09/01/2015 16:02 FiddleRust#6
Quote:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?<!/\s*)>
Try this