Ereg

Hi Leute,

ich habe eine .txt Datei die einen TAG beinhaltet der einmal mit einem Zeilenumbruch und einmal ohne in der .txt Datei steht.

Hier ein Bsp.:
BlaBla

BlaBla

Dann habe ich mit der ereg versucht diese TAG zufinden,
So
if(ereg("(.*)",$zeile,$rest))

echo „rest[1]“;

Der erste TAG wird gefunden und der zweite nicht.
Hat jemand eine Lösung?

Gruß Björn.

Der erste TAG wird gefunden und der zweite nicht.
Hat jemand eine Lösung?

Keine Antwort, aber eine Vermutung. Setz mal vor den ‚/‘ vor ANT einen Backslash, also

if(ereg("(.*)",$zeile,$rest))

und versuchs nochmal. Ich habs nicht mal ausprobiert, aber vielleicht kannst Du es für mich testen :smile:

Stefan

Nee dadd geht auch nicht.
Noch immer das Gleiche Problem.

Aber trotzdem danke.
Vielleicht noch eine Ideee?

Aber trotzdem danke.
Vielleicht noch eine Ideee?

Jetzt habe ich mich doch tatsächlich hingesetzt und das mal nachprogrammiert :smile:

Meine Source sieht so aus:

# Ersma String mit den Ameisen-Tags bauen
#
$bla = "Stefan Schustereit";
#
# Jetzt ereg-Funktion aufrufen.
# Wenn wir etwas gefunden haben, dann soll das
# komplette $rest-Array ausgegeben werden. Mal sehn,
# was da rauskommt.
#
if (ereg("(.\*)",$bla,$rest)) {
 #
 # Yep, da scheint was zu sein
 #
 $i = 0;
 while ($i \n";
 $i++;
 } # Ende while
} # Ende if

?\>

Bei mir kommt folgendes raus, wenn man in die HTML-Source reinschaut:

0: Stefan Schustereit

1: Stefan Schustereit

2: 

3: 

4: 

5: 

6: 

7: 

8: 

9: 

Also, mir kommt das richtig vor. Sieht das bei Dir anders aus?

Stefan

Ja, das funzt bei mir auch nur liegt das Problem daran wenn du den String anderst gestaltest.
Nämlich so:

Bla Bla,
HuHu

Da findet er nicht.
Er findet nur die TAGS die mit dem text in einer Zeile stehen.
Bla Bla, HuHu

Gruß björn.

Hallo,

veilleicht bringt es dich weiter, wenn du alle Zeilenumbrüche erst entfernst? Also erst mit fread schoen alles in eine Variable holnen und dann mit ereg_replace(„ANT>\n“, „ANT>“, $content); ersetzen.

Till

Ich habe nun eine Lösung gefunden.
Mann muß das ganze vorher in eine einzige Zeile schreiben.
Und dann auslesen.

Nur habe ich jetzt ein erneutes Problem.
Wenn ich nun mit ereg die Zeile durchsuche, nimmt er mir das erster und das letzte . Das bedeutet das ich die gesamten ´s (Antworten) in einer Zeile habe.
Ich möchte aber jede einzelne (.*) ausgegeben haben.

Es gibt doch bei ereg einen Befehl mit dem ich nicht das letzte sondern das nächste nehmen kann.
Wie geht das?

Gruß Björn.

Das liegt an der sogg. „Gier“ von * :smile:
Du kannst das umgehen, indem du deinen Regulären ausdruck negierst. Ich hab das gleich mal ausprobiert, allerdings mit preg_match_all. Das findet alles (schneller) und man kann normale Perl-Sysntax benutzen :wink:

Cu
Till

$filename = „test.txt“;
$fd = fopen ($filename, „r“);
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
$line = ereg_replace („ANT>\n“, „ANT>“, $contents);
if (preg_match_all ("/([^]+)/", $line, $match)) {
for ($i=0; $i