phpbar.de logo

Mailinglisten-Archive

[php] Regex Problem

[php] Regex Problem

Sebastian Mendel lists at sebastianmendel.de
Die Jul 1 07:15:11 CEST 2008


Marcel Kurz schrieb:
> Hallo Sebastian,
> 
>> du musst \ doppelt escapen also, \\\\
>>
>> $pattern = '/\[KNR\](.*?)\[\\\\KNR\]/is';
> kannst du mir das noch mal genauer erklären ?
> Wenn ich \ escapen will dann hab ich gedacht ich muss nur
> ein \ davorsetzen also \\ schreiben bei dir setze ich ja
> DREI \\\ vor das eigentliche \...

"DREI \\\ vor ..."

ist nicht ganz richtig, denn es sind nicht drei davor sondern eins

\ -> \\ - aber diese zwei sind jeweils nochmal escaped also \\ plus \\

das ergibt dann vier \\ -> \\\\

wie Yannik schon richtig bemerkt, das erste escapen ist für PHP:
macht also aus \\\\ -> \\ und das zweite ist den REGEX-Parser \\ -> \

> bei den [ langt ja auch nur ein \ um zu escapen
> jetzt bin ich etwas verwirrt... 

weil [ auch keine besondere Bedeutung in PHP Strings hat, deshalb muss auch 
nur für den REGEX-Parser escaped werden, aber nicht für PHP - wenn es eine 
Bedeutung hätte wäre der erste Backslash für den REGEX-Parser-> \[ und beide 
Zeichen müssten nochmal für PHP escaped werden \\\[

sprich du musst dir immer erst überlegen was der REGEX-Parser braucht, und 
wenn du das dann in einen PHP-String schreibst nochmal alle Zeichen die eine 
besondere Bedeutung in PHP Strings haben escapen

SUCHE = foo\bar
REGEX = foo\\bar
PHP   = 'foo\\\\bar'

wobei das davon abhängt welche quotes du nimmst

SUCHE = 'foo'\$["bar"]
REGEX = 'foo'\\$\["bar"\]
PHP   = '\'foo\'\\\\$\["bar"\]'
PHP   = "'foo'\\\\\$\\[\"bar\"\]"

(wenn ich mich jetzt nicht vertan habe)


-- 
Sebastian Mendel

php::bar PHP Wiki   -   Listenarchive