Twilo: preg_match_all Frage

Hallo,

ich schlage mich gerade mit PCRE rum, und versteh etwas nicht so ganz

$string = 'test1 test2 test3 %test4% test5 test6 %test7%';  
preg_match_all("/\bt(\w+)6\b/", $string, $ausgabe);  
print_r($ausgabe);

als Ausgabe erhalte ich dann folgendes
Array
(
    [0] => Array
        (
            [0] => test6
        )

[1] => Array
        (
            [0] => est
        )

)
soweit so gut

$string = 'test1 test2 test3 %test4% test5 test6 %test7%';  
preg_match_all("/\b%(\w+)%\b/", $string, $ausgabe);  
print_r($ausgabe);

Array
(
    [0] => Array
        (
        )

[1] => Array
        (
        )

)
könnte mir jemand verraten, warum ich nicht "test4" und "test7" als Ausgabe bekomme?

wenn ich nach normalen Buchstaben suche, klappt alles, bei Sonderzeichen irgendwie nicht, wie kann ich trotzdem danach suchen?

aus CII. Reguläre Ausdrücke Funktionen (Perl-kompatibel) werd ich nicht ganz schlau
in mein Buch sind auch nur Beispiele mit Buchstaben

mfg
Twilo

  1. Hi,

    preg_match_all("/\b%(\w+)%\b/", $string, $ausgabe);

    \b%
    eine Wort-Grenze gefolgt von einem % - für \b muß, da % kein Wort-Zeichen ist, das Zeichen vor dem \b% ein Wort-Zeichen sein.
    Vor %test4% steht aber ein Leerzeichen, kein Word-Character. ==> \b matcht nicht.

    Analog für das %\b - auch das ist keine Wort-Grenze, da sowohl das % als auch das folgende Leerzeichen keine Wortzeichen sind.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      preg_match_all("/\b%(\w+)%\b/", $string, $ausgabe);

      \b%
      eine Wort-Grenze gefolgt von einem % - für \b muß, da % kein Wort-Zeichen ist, das Zeichen vor dem \b% ein Wort-Zeichen sein.
      Vor %test4% steht aber ein Leerzeichen, kein Word-Character. ==> \b matcht nicht.

      Analog für das %\b - auch das ist keine Wort-Grenze, da sowohl das % als auch das folgende Leerzeichen keine Wortzeichen sind.

      irgendwie verwirrst du mich mit deinen 2 Sätzen ;-)

      ps. ohne \b funktioniert es zwar, findet aber bissel zu viel

      mfg
      Twilo

      1. gudn tach Twilo!

        irgendwie verwirrst du mich mit deinen 2 Sätzen ;-)

        vielleicht hilft der perl-text:
        "perldoc perlre | grep -C \b"

        zitat:
        A word boundary ("\b") is a spot between two characters that has a "\w"
        on one side of it and a "\W" on the other side of it (in either order),
        counting the imaginary characters off the beginning and end of the
        string as matching a "\W".

        prost
        seth