PHP: preg_match_all - ich finde den Fehler nicht...
Hocker auf Kopf
- php
Hallo,
es ist spät Abends und ich scheine so richtig auf dem Schlauch zu stehen. Ich bekomme in einem PHP Script den folgenden String:
string(3457) " <li class="cat-item cat-item-634"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/andersen-moormann-und-selb/">Andersen, Moormann und Selb</a>
</li>
<li class="cat-item cat-item-434"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/ballauf-und-schenk/">Ballauf und Schenk</a>
</li>
<li class="cat-item cat-item-48"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/batic-und-leitmayr/">Batic und Leitmayr</a>
</li>
<li class="cat-item cat-item-613"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/berg-und-tobler/">Berg und Tobler</a>
</li>
<li class="cat-item cat-item-555"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/berlinger/">Berlinger</a>
</li>
<li class="cat-item cat-item-619"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/borowski-und-sahin/">Borowski und Sahin</a>
</li>
<li class="cat-item cat-item-491"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/brix-und-janneke/">Brix und Janneke</a>
</li>
<li class="cat-item cat-item-474"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/dorn-und-lessing/">Dorn und Lessing</a>
</li>
<li class="cat-item cat-item-439"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/eisner-und-fellner/">Eisner und Fellner</a>
</li>
<li class="cat-item cat-item-633"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/faber-boenisch-herzog-und-pawlak/">Faber, Bönisch, Herzog und Pawlak</a>
</li>
<li class="cat-item cat-item-554"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/falke-und-grosz/">Falke und Grosz</a>
</li>
<li class="cat-item cat-item-624"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/gorniak-und-winkler/">Gorniak und Winkler</a>
</li>
<li class="cat-item cat-item-630"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/grandjean-und-ott/">Grandjean und Ott</a>
</li>
<li class="cat-item cat-item-440"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/lannert-und-bootz/">Lannert und Bootz</a>
</li>
<li class="cat-item cat-item-623"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/lindholm-und-schmitz/">Lindholm und Schmitz</a>
</li>
<li class="cat-item cat-item-372"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/murot/">Murot</a>
</li>
<li class="cat-item cat-item-625"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/odenthal-und-stern/">Odenthal und Stern</a>
</li>
<li class="cat-item cat-item-486"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/rubin-und-karow/">Rubin und Karow</a>
</li>
<li class="cat-item cat-item-628"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/schuerk-und-hoelzer/">Schürk und Hölzer</a>
</li>
<li class="cat-item cat-item-430"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/thiel-und-boerne/">Thiel und Boerne</a>
</li>
<li class="cat-item cat-item-466"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/tschiller-und-gumer/">Tschiller und Gümer</a>
</li>
<li class="cat-item cat-item-487"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/voss-und-ringelhahn/">Voss und Ringelhahn</a>
</li>
Damit ich es schön als Array weiterverwursten kann, möchte ich es mit preg_match_all weiter demontieren:
preg_match_all('|<li class="cat-item cat-item-(.*)">(.*)<a href="(.*)" title="(.*)">(.*)</a>(.*)</li>|Uism',$cat_list, $kommissar_array_unsauber, PREG_PATTERN_ORDER);
Doch das Ergebnis ist:
array(7) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } [4]=> array(0) { } [5]=> array(0) { } [6]=> array(0) { } }
Vielleicht ist auch schon zu spät für meine Rübe, aber ich sehe den Fehler nicht mehr.
Oh man da habe ich ganz schön auf der Leitung gestanden
<li class="cat-item cat-item-(.*)"><a href="(.*)">(.*)</a>(.*)</li>
wäre es gewesen.
Als kleine Randnotiz: Statt den vielen "faulen" Punkten (.*
lazy durch U
-flag) empfiehlt es sich, negierte Zeichenklassen zu verwenden wo immer möglich. Siehe z.B. dieses Regex101 Demo. Der U
-modifier kommt dann weg, da er ja keinen gierigen Punkt mehr "einzubremsen" braucht.
Auch das m
multline flag brauchen wir nicht wirklich, da ja kein ^
oder $
vorkommt. Und da ja auch gar kein Punkt mehr vorkommt, hauen wir das s
single-line flag auch noch raus. 😉
~<li class="cat-item cat-item-([^"]*)"><a href="([^"]*)">([^<]*)</a>([^<]*)</li>~i
Dann hoffe ich mal, dass du eine erholsame Nachtruhe hast. 🌚
@@Hocker auf Kopf
<li class="cat-item cat-item-434"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/ballauf-und-schenk/">Ballauf und Schenk</a></li> <li class="cat-item cat-item-48"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/batic-und-leitmayr/">Batic und Leitmayr</a></li>
So richtig sinnvoll ist das Markup aber nicht. Die Identifikatoren cat-item-{Nummer}
sind doch wohl eindeutig? Also IDs, keine Klassen:
<li class="cat-item" id="cat-item-434"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/ballauf-und-schenk/">Ballauf und Schenk</a></li>
<li class="cat-item" id="cat-item-48"><a href="https://irgendwas.de/category/kommissare/kommissare-im-dienst/batic-und-leitmayr/">Batic und Leitmayr</a></li>
Und wenn sämtliche Listitems derselben Klasse cat-item
angehören, dann ist diese Klasse überflüssig.
Wenn die Liste <ul class="cats">
ist, dann können die Listitems als .cats > li
selektiert und gestylt werden.
🖖 Живіть довго і процвітайте