LX: Frage zu einem regulären Ausdruck

Beitrag lesen

Hi!

Vielleicht könnte mir auch jemand erklären, wie der komplette Ausdruck genau arbeitet, denn wirklich durchschauen kann ich ihn nicht:

~~~php

// $s case-insensitive in $t hervorheben:

preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);

  
Gematcht werden Elemente, die entweder "<" bis ausschließlich ">" sind, und $s, was auch immer darin stehen mag. In der Ersetzung ist eine Abfrage in Kurzform:  
  
[Bedingung] ? [falls wahr] : [andernfalls], die innerhalb der Abfrage umgesetzt wird. durch die doppelte Klammerung der Tags wird ein so gematchtes Tag sowohl in \1 als auch in \2 gespeichert. Wenn also \1 gleich \2 ist, also ein Tag geparst wurde, wird dieses unverändert zurückgegeben, ansonsten wird, wenn \2 leer ist, also kein Tag gematcht wurde, <b>$s</b> zurückgegeben.  
  
Das Ergebnis ist, dass $s in <b>-Tags gesetzt wird, es sei denn, es steht in einem Link. Diese Ersetzung hätte man auch verständlicher und/oder eleganter machen können, aber sicher kaum kürzer oder schneller.  
  
Gruß, LX

-- 
RFC 1925, Satz 8: Es ist komplizierter als man denkt.