hawkmaster: Suchmuster, stört das + Zeichen?

Hallo zusammen,
ich hatte eben etwas Merkwürdiges festgestellt.

Ich suche in einem Text.

*EFBrightness +0.24/85%  Lightest: "
*EFBrightness +0.16/90%  Lighter: "
*EFBrightness 00.00/100% Normal: "
*EFBrightness -0.08/105% Dark: "

Ich Suchergebnis soll der Wert nach dem Slash / stehen, also;
85%  Lightest
90%  Lighter
100% Normal
105% Dark

ich mache es so und hatte bisher bei allen Tests nie Probleme.
in der Variablen $open steht "EFBrightness" und in $item steht das wort vor dem Slash / also etwa;
+0.24
00.00
-0.08
$trans = preg_match("#\*".$open." ".$item."/(.*?):#",$string1,$transitem);

jetzt wird aber nur alles gefunden wo kein + Zeichen vorkommt.
also nur;
100% Normal
105% Dark

Ich vermute das event. das + zeichen der Grund ist?
Wie könnte man das Suchmuster berbessern?

vielen Dank und viele Grüße
hawk

  1. Hi hawkmaster,

    Ich vermute das event. das + zeichen der Grund ist?
    Wie könnte man das Suchmuster berbessern?

    Das + hat in regulären eine besondere Bedeutung, welche in den Regular Expression Details des PHP-Manuals gelistet ist.
    Du musst das + escapen, damit es seine Sonderbedeutung verliert. In deinem Fall, da die Suchmuster aus Variablen kommen, würde ich dir zu der Funktion preg_quote() raten, welche dies erledigt.

    Viele Grüße,
      ~ Dennis.

    1. Hallo Dennis,
      recht herzlichen Dank für diesen Tipp.

      << Fall, da die Suchmuster aus Variablen kommen, würde ich dir zu der Funktion preg_quote() raten, welche dies erledigt.

      Gerade habe ich im Php Manual diese Funktion gefunden :-))
      Das muss ich mir merken.

      vielen Dank und viele Grüße
      hawk

    2. Hi hawkmaster,

      Ich vermute das event. das + zeichen der Grund ist?
      Wie könnte man das Suchmuster berbessern?

      Das + hat in regulären eine besondere Bedeutung, welche in den Regular Expression Details des PHP-Manuals gelistet ist.
      Du musst das + escapen, damit es seine Sonderbedeutung verliert. In deinem Fall, da die Suchmuster aus Variablen kommen, würde ich dir zu der Funktion preg_quote() raten, welche dies erledigt.

      Wow, das ist ja viel besser als meine Lösung. Jetzt kenn' ich die Funktion auch =)

  2. ich mache es so und hatte bisher bei allen Tests nie Probleme.
    in der Variablen $open steht "EFBrightness" und in $item steht das wort vor dem Slash / also etwa;
    +0.24
    00.00
    -0.08
    $trans = preg_match("#\*".$open." ".$item."/(.*?):#",$string1,$transitem);

    jetzt wird aber nur alles gefunden wo kein + Zeichen vorkommt.
    also nur;
    100% Normal
    105% Dark

    Ich vermute das event. das + zeichen der Grund ist?
    Wie könnte man das Suchmuster berbessern?

    Ja, "+" bedeutet das gleiche wie "*" nur, dass es mindestens einmal vorkommen muss. Du musst das "+" also escapen.

    if ($item[0] == '+')
    {
       $item = ''.$item;
    }