phpbar.de logo

Mailinglisten-Archive

[php] RegX

[php] RegX

Niklas Funke phpbar at oupz.de
Fre Okt 14 14:57:45 CEST 2005


Niels Jäckel schrieb:

>Hallo Thomas,
>
>  
>
>>preg_replace('^<p*>$','ss', $a);
>>
>>bringt leider nur die Fehlermeldung: Warning: No ending delimiter '^'
>>found in /home/hausheer/public_html/transfer/regex.php on line 9
>>    
>>
>
>
>die Regulären Ausdrücke müssen mit einem bestimmten Character
>eingeschlossen werden.
>
>z.B. /regexe/
>oder |regexe|
>oder ich nehm gerne °regexe°
>
>d.h. deine regexe würde dann schonmal so aussehen:
>
>°^<p*>$°
>
>das würde aber nur auf einen text passen der GANZ AM ANFANG <p stehen
>hat und GANZ AM ENDE >. Das ist ja aber nicht das, was du möchtest.
>
>°<p*>°
>
>wäre also schon etwas besser. Allerdings macht dein * folgendes: das p
>beliebig oft. Ist auch falsch. Also:
>
>°<p.*>°
>
>soll heissen: erst ein p und dann ein beliebiges zeichen (kein umbruch)
>beliebig oft. Das frisst dir aber alle Zeichen auf, die kommen könnten.
>Mein Vorschlag würde also so aussehen:
>
>°\<p[^\>]*\>°s
>
>wobei der Modifier s hier heisst, dass die Groß- und Kleinschreibung
>egal sind.
>
>Im Detail: erst eine spitze Klammer auf, dann ein p oder P und
>schließlich alle Zeichen ausser > beliebig oft (heisst auch garnicht)
>und am ende dann >.
>
>
>hth,
>Niels
>  
>
Einen kleinen Einwand hätte ich da noch Niels

der Modifier "s" steht nicht für CaseInsensitiv sondern für ...

Auszug aus Reggenechsen:
*s für DotAll*
Der Punkt steht, wie wir zuvor gesehen haben für alle beliebigen 
Zeichen, außer dem Zeilenumbruch, also dem Newline. Wird die Option 
eingeschaltet, so findet der Punkt auch dieses Zeichen. Allerdings ist 
das auch nicht die ganze Wahrheit: das Newline wird auch von sogenannten 
negierten Zeichenklassen gefunden. Lautet also ein Regex "[^x]", so 
werden alle Zeichen, auch Newlines gefunden, die kein 'x' sind!

"i" wäre der Richtige für Caseless =)

Gruss nik


php::bar PHP Wiki   -   Listenarchive