preg_match mit "
adni123
- php
1 Felix Riesterer0 adni1230 Felix Riesterer0 adni1230 adni123
0 seth
Hallo,
ich moechte eine Zeichenkette auf folgendes durchsuchen:
<ID n="XX">
-> XX ist eine beliebige Zahl; diese Zahl brauche ich dann
zur weiteren Verwendung.
Probiert hab ich folgendes, weil ich das in PERL so da hatte:
if (preg_match("/<ID n="(\d*)">/", $line, $treffer) && ($flag===1)) {$knoten=$1;}
Aber irgendwie kommt immer nur ein PARSE-ERROR.
Ich denk ja, das es mit den Hochkommas um \d zu tun hat? Aber ich weiss nicht, wie ich es loesen kann, weil die Hochkommas in der Zeile, doe geparst werden soll, auch wirklich vorhanden sind. Wollte die mit einem '' quoten, aber das ging auch nicht...
Danke Andi
Liebe Andi,
if (preg_match("/<ID n="(\d*)">/", $line, $treffer) && ($flag===1)) {$knoten=$1;}
Aber irgendwie kommt immer nur ein PARSE-ERROR.
Das ist ja klar, denn ("..."..."...") gibt nunmal Probleme! Du hast zwei Möglichkeiten das zu korrigieren, entweder Du setzt Dein Suchmuster in einfache Anführungszeichen, oder Du maskierst die zu suchenden Anführungszeichen mit einem Backslash.
if (preg_match('/<ID n="(\d)*">/', $line, $treffer) && ($flag===1))
oder
if (preg_match("/<ID n=\"(\d)*\">/", $line, $treffer) && ($flag===1))
Liebe Grüße aus Ellwangen,
Felix Riesterer.
if (preg_match('/<ID n="(\d)*">/', $line, $treffer) && ($flag===1))
oder
if (preg_match("/<ID n=\"(\d)*\">/", $line, $treffer) && ($flag===1))
Oh, vielen Dank.
Das geht jetzt ohne den Fehler. Super.
Einzig, ich bekomme jetzt keine Treffer. Kann es daran liegen, dass das (\d*) durch die Hochkommas nicht geparst werden?
Danke Andi
Liebe Selfer,
Einzig, ich bekomme jetzt keine Treffer. Kann es daran liegen, dass das (\d*) durch die Hochkommas nicht geparst werden?
Tja, da ist ein Unterschied zwischen (\d*) und (\d)*! Welches meinst Du denn? Ich denke Du suchst ersteres! Die Hochkommas stören nicht, da sie nicht PHP-String-technisch interpretiert werden.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Einzig, ich bekomme jetzt keine Treffer. Kann es daran liegen, dass das (\d*) durch die Hochkommas nicht geparst werden?
Tja, da ist ein Unterschied zwischen (\d*) und (\d)*! Welches meinst Du denn? Ich denke Du suchst ersteres! Die Hochkommas stören nicht, da sie nicht PHP-String-technisch interpretiert werden.
Hm, also ich hab mal so gesucht:
[code]if (preg_match('|<ID n=|', $line)) {print "$line<br>";}[\code]
Da bringt er mir alle Zeilen die ich will. Sobald ich aber (\d*) mit ins Spiel bringe, zeigt er mir keine $line.
Na ich probier noch mal ein bissl rum.
Ansonsten ein schoenes WE
Andi
[code]if (preg_match('|<ID n=|', $line)) {print "$line<br>";}[\code]
Also, hab es noch mal eingeschraenkt:
if (preg_match('|<ID n="(.*)">|', $line) && ($flag==1)) {echo "TREFFER";}
bringt KEINE Ausgabe
if (preg_match('|<ID n=(.*)>|', $line) && ($flag==1)) {echo "TREFFER";}
bringt eine Ausgabe
if (preg_match('|<ID n=\d*>|', $line) && ($flag==1)) {echo "TREFFER";}
bringt aber auch KEINE Ausgabe
Uhhhh, ich will mein PERL zurueck :-( :-)
Andi
[code]if (preg_match('|<ID n=|', $line)) {print "$line<br>";}[\code]
So, jetzt hab ich es wohl:
if (preg_match('|<ID n="([\d*])"/>|', $line,$treffer) && ($flag==1))
ist die Loesung. Also die " muessen doch gequotet werden und der Suchbegriff muss in eckige Klammern.
Danke fuer eure Hilfe
Liebe Selfer,
So, jetzt hab ich es wohl:
if (preg_match('|<ID n="([\d*])"/>|', $line,$treffer) && ($flag==1))
ist die Loesung. Also die " muessen doch gequotet werden und der Suchbegriff muss in eckige Klammern.
Hmm, also die eckigen Klammern ergeben mit dem Sternchen keinen Sinn! Es sollte so auch ganz ohne gehen. Was das Escapen der Quotes angeht, so sollte es eigentlich auch ohne matchen, da das Suchmuster ja in einfachen Quotes steht...
Aber wie ich sehe, hast Du deine $treffer wieder mit an Bord. Ob es daran lag?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
if (preg_match('|<ID n="([\d*])"/>|', $line,$treffer) && ($flag==1))
Hmm, also die eckigen Klammern ergeben mit dem Sternchen keinen Sinn! Es sollte so auch ganz ohne gehen. Was das Escapen der Quotes angeht, so sollte es eigentlich auch ohne matchen, da das Suchmuster ja in einfachen Quotes steht...
Hm, also nur mit den eckigen Klammern wird die Zahl im $treffer-Array abgelegt. Keine Ahnung warum das ohne nicht geht.
Und auch nur, wenn die Hochkommas gequotet werden, schlaegt das preg_match ueberhaupt zu, will heissen, wertet die Regex in $line aus.
Danke fuer deine Hilfe
Andi
gudn tach Andi!
irgendwas ist hier faul. hast du mal in $line reingeschaut? steht da wirklich das drin was du glaubst, dass es drinsteht?
das script
<?php
function such_id($line, $i){
echo "\ntest $i: $line\n";
preg_match('|<ID n="(\d*)"/>|', $line, $treffer);
echo 're1: '.((count($treffer)>1)? $treffer[1]:'nix')."\n";
preg_match('|<ID n=\"([\d*])\"/>|', $line, $treffer);
echo 're2: '.((count($treffer)>1)? $treffer[1]:'nix')."\n";
}
$i=0;
such_id('foo<ID n="13"/>bar', ++$i);
such_id('foo<ID n="5"/>bar', ++$i);
such_id('foo<ID n="*"/>bar', ++$i);
?>
gibt bei mir folgendes aus:
---------------------------
test 1: foo<ID n="13"/>bar
re1: 13
re2: nix
test 2: foo<ID n="5"/>bar
re1: 5
re2: 5
test 3: foo<ID n="*"/>bar
re1: nix
re2: *
---------------------------
bei dir nicht?
der regexp /([\d*])/ matcht genau ein zeichen, welches eine ziffer oder ein stern ist; ist also aquivalent zu /([0-9*])/
prost
seth
Lieber Andi,
if (preg_match('|<ID n="(.*)">|', $line) && ($flag==1)) {echo "TREFFER";}
Wo ist denn Dein $treffer geblieben? Sollte darin nicht der Treffer enthalten sein?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
gudn tach!
Felix' vorschlag war ok. vielleicht ist $line gar nicht so gebaut, wie du sagtest?
preg_match('/<ID n="(\d*)">/', $line, $treffer)
sollte auf jeden fall funktionieren.
Kann es daran liegen, dass das (\d*) durch die Hochkommas nicht geparst werden?
nee.
prost
seth