seth: wortende, wortanfang \b, \B

Beitrag lesen

gudn tach!

ich habe den betreff zu perl geaendert, weil mir die regexp-engine von js gruselig ist.

Wie ist denn ein Wortende definiert? Ein Leerzeichen, ein Whitespace?

Nein. \b und \B sind nicht als ein (oder mehrere Zeichen) definiert. Sie sind als Positionen definiert. Und zwar \b als die Position zwischen einem Wort-Zeichen und einem Nicht-Wortzeichen. Und \B als Position zwischen 2 Wortzeichen (ob es auch die Position zwischen 2 Nicht-Wort-Zeichen matcht, weiß ich grad nicht).

ja, \B ist die (logische) umkehrung von \b.

\b matcht die grenze zwischen \w und \W (oder stringende) oder \W (oder stringanfang) und \w.
\B matcht die grenze zwischen \w und \w oder \W (oder stringanfang) und \W (oder stringende).

ich denke, man kann die beiden auch uebersetzen mit

\b  =  (?<=\w)(?!\w)|(?<!\w)(?=\w)
\B  =  (?<!\w)(?!\w)|(?<=\w)(?=\w)

wobei zu beachten ist, dass (?<!\W) ("davor kein nicht-wortzeichen") nicht dasselbe ist wie (?<=\w) ("davor ein wortzeichen") usw.

so liefert z.b. /\B/ auch beim leeren string '' einen treffer.

und deswegen wuerde auch

  $_='P(200;300);';  
  s/;\B/,/g;  
  print;

ergeben:

P(200;300),

in javascript bei mir (mozilla 1.7.13, win2k) uebrigens auch:

javascript:curLine="P(200;300);"; curLine = curLine.replace(/;\B/g,","); alert(curLine);

wuerde man ein kleines "b" waehlen, wuerde das erste semikolon ersetzt, das letzte (am stringende stehende) jedoch nicht.

prost
seth