Regulärer Ausdruck findet zuviel?
hawkmaster
- php
0 Texter mit x0 hawkmaster
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
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.
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
Das habe ich schon. Hatte es so versucht:
...
Also kein Erfolg?
vielen Dank und viele Grüße
Oder doch?
Nein,
es wird dann garnicht mehr in den Pregmatch gepsrungen
Es wird also nicht gefunden
vielen Dank und viele Grüße
hawk
Es wird also nicht gefunden
Endet die Zeile denn mit $element? Ganz sicher?
Ach, und mach mal Kontrollausgaben z.B. von:
"#\OrderDependency: (.*?) (.*?) \".$element."#";
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