hawkmaster: Regulärer Ausdruck findet zuviel?

Hallo zusammen,

ich durchsuche eine Textdatei nach einem bestimmten Vorkommen.
Ich weiss wie die Zeile anfängt, nämlich immer mit

*OrderDependency:

dann kommt ein Leerzeichen, die gesuchte Zahl, wieder ein Leerzeichen, der gesuchte String (Wort), wieder ein Leerzeichen. Das Ende wie z.b.
*EFFold ist wieder bekannt.
von der Zeile
*OrderDependency: 50.0 AnySetup *EFFold

brauche ich also 50.0 und AnySetup

Meine Suche funktioniert soweit. In "$element" steht z.b. EFFold

if(preg_match("#\OrderDependency: (.*?) (.*?) \".$element."#", $string1, $default)){
..

Das Problem ist nun das in der Datei zuerst eine ähnliche Zeile kommt, nämlich:
*OrderDependency: 0.0 AnySetup *EFFoldOpt

und diese wird gefunden auch mit EFFold
Ich suche also etwas das ganz genau nach dem Wort "EFFold" sucht.
Ich habe schon versucht ein Zeilenende \n zu setzen aber das ging schief.

Gesucht wird also:
*OrderDependency: 50.0 AnySetup *EFFold

Ich hoffe ich habe mich verständlich ausgedrückt :-)

vielen Dank und viele Grüße
hawk

  1. Ich habe schon versucht ein Zeilenende \n zu setzen aber das ging schief.

    Schau Dir mal den s-Modifier und die Bedeutung des Dollarzeichens an.

    1. Hallo,

      Schau Dir mal den s-Modifier und die Bedeutung des Dollarzeichens an.

      Das habe ich schon. Hatte es so versucht:
      if(preg_match("#\OrderDependency: (.*?) (.*?) \".$element."$#", $string1, $default)){

      und auch
      if(preg_match("#\OrderDependency: (.*?) (.*?) \".$element."$#s", $string1, $default)){

      vielen Dank und viele Grüße
      hawk

      1. Das habe ich schon. Hatte es so versucht:

        ...

        Also kein Erfolg?

        vielen Dank und viele Grüße

        Oder doch?

        1. Nein,
          es wird dann garnicht mehr in den Pregmatch gepsrungen
          Es wird also nicht gefunden

          vielen Dank und viele Grüße
          hawk

          1. Es wird also nicht gefunden

            Endet die Zeile denn mit $element? Ganz sicher?

            Ach, und mach mal Kontrollausgaben z.B. von:
            "#\OrderDependency: (.*?) (.*?) \".$element."#";

            1. Endet die Zeile denn mit $element? Ganz sicher?

              Ja das tut sie.
              Jetzt habe ich es aber herausgefunden.
              Ich brauche ein \r als Zeilenabschluss. Ich hatte es immer mit \n versucht.
              Das klappte aber nicht.
              Komischerweise hat es mit $ als Stringende auch nicht funktioniert.
              SO geht es nun.
              if(preg_match("#\OrderDependency: (.*?) (.*?) \".$element."\r#", $string1, $default)){

              vielen Dank und viele Grüße
              hawk