Mehrfach auftretende reguläre Ausdrücke
Worrel
- php
0 mexchen0 Worrel
0 Sönke Tesch0 Worrel
Hallo,
mein Problem ist, daß ich mehrfach auftretende Textteile aus einem String in einem Array speichern will.
Das folgende Skript liefert aber nur das erste Aufkommen des regulären Ausdruckes ins (ziemlich eindimensionale) Array.
Was mache ich falsch ?
thx for help,
Worrel
<?php
$test = "Dies ist ein Testtext.";
$regexp = "[t]";
ereg($regexp, $test, $regs);
echo ("".count ($regs)."-mal gefunden.\n");
for ($f = 0; $f < count ($regs); $f++) {
$erg = $erg . $regs[$f];
}
echo ($erg);
?>
Hallo Worrel,
Vielleicht kann das Dir ja weiterhelfen:
echo substr_count("Dies ist ein Testtext", "t");
Grüsse mexchen
echo substr_count("Dies ist ein Testtext", "t");
Nicht ganz, eigentlich wollte ich die gefundenen Strings in einem Array speichern und später weiter verarbeiten.
In meinem obigen Beispiel wäre das natürlich Blödsinn, dann hätte ich ein Array mit lauter "t"-Elementen.
Auf jeden Fall schon mal Danke für die Antwort.
mein Problem ist, daß ich mehrfach auftretende Textteile aus einem String in einem Array speichern will.
Das folgende Skript liefert aber nur das erste Aufkommen des regulären Ausdruckes ins (ziemlich eindimensionale) Array.
$regexp = "[t]";
ereg($regexp, $test, $regs);
Ich möchte mal behaupten, daß Du a) die Funktion falsch anwendest und b) die falsche Funktion zu fassen hast.
ereg() speichert zwar passende Teile im Ergebnis, aber nur, wenn im Muster diese Teile geklammert sind (runde Klammer). Und auch dann speichert sie nicht alle Vorkommen, sondern nur einmal alle geklammerten Muster.
Das Beispiel aus der Anleitung macht das deutlich:
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs))
echo "$regs[3].$regs[2].$regs[1]";
Du hast hier im Muster drei Paare aus runden Klammern. Der Inhalt dieser Klammern wird in den Einträgen 1 bis 3 von $regs gespeichert. $regs[0] sollte den kompletten Text enthalten.
2002-12-24
sollte also
$regs[0] > 2002-12-24
$regs[1] > 2002
$regs[2] > 12
$regs[3] > 24
ergeben.
2002-12-24 2003-12-24 2004-12-24
ergibt entweder auch obiges Ergebnis oder einen Fehler.
Daß Dein $regs nur einen Einträg enthält, liegt also schlicht und ergreifend daran, daß Du keine runden Klammern hast. Das $regs[0] ein t enthalten soll, passt allerdings irgendwie nicht zur Anleitung.
Gute Nachricht zum Schluß: Die Funktion, die Du wahrscheinlich suchst, lautet preg_match_all():
"Searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by order."
Gruß,
soenk.e
Gute Nachricht zum Schluß: Die Funktion, die Du wahrscheinlich suchst, lautet preg_match_all():
"Searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by order."
Erst mal vielen Dank für die ausführliche Antwort.
Bei preg_match_all() wird jedoch ein mehrdimensionales Array erzeugt. Gibt es eine Möglichkeit, nur ein einfaches eindimensionales Array zu erzeugen ?