| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

24-05-2005, 21:17
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
preg_match mit komischen Ergebnissen
Hiho
also ich suche im folgendem html-Fragment
Code:
...
<tr>
<th colspan="6">Ressourcen</th>
</tr>
<tr>
<td colspan="3">Arbeiter</td>
<td colspan="3">76.215</td>
</tr>
<tr>
<td colspan="3">verfügbare Arbeitskräfte</td>
<td colspan="3">1.484</td>
</tr>
<tr>
<td colspan="3">Energie</td>
<td colspan="3">428.670</td>
</tr>
<tr>
<td colspan="3">Eisen</td>
<td colspan="3">101.452</td>
</tr>
<tr>
<td colspan="3">Silizium</td>
<td colspan="3">166.882</td>
</tr>
<tr>
<td colspan="3">Kohlenstoff</td>
<td colspan="3">26.567</td>
</tr>
...
ich versuche folgenden php-Code
PHP-Code:
$startcode="%<td";
$endcode="</td>%s";
//for($x=1;$x<20;$x++)
//{
preg_match("$startcode(.*)$endcode", $inhalt, $was_raus_kommt);
echo "hl: ".$was_raus_kommt[1];
//}
?>
ich kriege dann dieses Ergebnis:
hl: colspan=3>Arbeiter51.520verfügbare Arbeitskräfte2.618Energie23.736Eisen115.271Silizium108.612Kohlenstoff142.045Wasser14.892Sauerstoff22 .346Wasserstoff273.560 usw.
Meine Frage ist jetzt, wie er dazu kommt, denn ich hab ja den Modifier s gesetzt und wieso schreibt er nicht jedesmal wieder colspan=3 davor ???
wenn ich jetzt den $startcode ein bisschen abänder, sagen wir mal ich häng noch " colspan" hinten hin findet er gar nichts mehr, kann mir das wer erklären ???
thx schomal
cya
Gagi
|

24-05-2005, 21:23
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Re: preg_match mit komischen Ergebnissen
Zitat:
Original geschrieben von Gagi
ich kriege dann dieses Ergebnis
|
und das stammt aus dem QUELLTEXT ?
__________________
-
|

24-05-2005, 21:29
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
es wird dann genau so angezeigt wenn ich die site aufrufe
wenn ichs nicht anders wüsste, würde ich sagen du bist vom Namen her mein Bruder *g*
Geändert von Gagi (24-05-2005 um 21:33 Uhr)
|

24-05-2005, 21:33
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von Gagi
es wird dann genau so angezeigt wenn ich die site aufrufe
|
warum schreibe ich quelltext GROSS?
ich möchte nicht wissen, was du ANGEZEIGT bekommst, sondern was im QUELLTEXT steht.
__________________
-
|

24-05-2005, 21:36
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
hab doch oben schon geschriebn was im QUELLTEXT steht, ich dachte du beziehst dich auf ERGEBNIS
|

24-05-2005, 21:44
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
komisch. wenn ich deinen code ^^ teste, steht in der AUSGABE
Code:
hl: colspan="3">Arbeiter 76.215 verfügbare Arbeitskräfte 1.484
Energie 428.670 Eisen 101.452 Silizium 166.882 Kohlenstoff 26.567
und im QUELLTEXT
Code:
hl: colspan="3">Arbeiter</td>
<td colspan="3">76.215</td>
</tr>
<tr>
<td colspan="3">verfügbare Arbeitskräfte</td>
<td colspan="3">1.484</td>
</tr>
<tr>
<td colspan="3">Energie</td>
<td colspan="3">428.670</td>
</tr>
<tr>
<td colspan="3">Eisen</td>
<td colspan="3">101.452</td>
</tr>
<tr>
<td colspan="3">Silizium</td>
<td colspan="3">166.882</td>
</tr>
<tr>
<td colspan="3">Kohlenstoff</td>
<td colspan="3">26.567
... ich würds ja mal mit preg_match_all() und ungreedy versuchen
__________________
-
|

24-05-2005, 21:47
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
Also wenn du jetzt auf die unterschiedlichen werte anspielst, tut mir leid hab was falsches kopiert, aber vom aufbau is es genau gleich, nur die zahlen sind halt anderst
was meinst du mit ungreedy ???
bei preg_match_all krieg ich nur "array" zurück
|

24-05-2005, 21:55
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von Gagi
Also wenn du jetzt auf die unterschiedlichen werte anspielst, tut mir leid hab was falsches kopiert, aber vom aufbau is es genau gleich, nur die zahlen sind halt anderst
|
häh?
Zitat:
|
was meinst du mit ungreedy ???
|
schau dir die modifier an, "ungreedy" heisst wörtlich ungierig
Zitat:
|
bei preg_match_all krieg ich nur "array" zurück
|
ersetze echo durch print_r()
du musst hier schon mitarbeiten. hier haben die wenigsten lust, fertige lösungen auf dem silbertablett zu servieren. in den tutorials findest du auch noch einiges zu regex. schau mal da rein.
__________________
-
|

24-05-2005, 22:20
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
wenn du dir die Zahlen vom Quellcod anguckst und die Zahlen von der Ausgabe wirst feststellen dass die anders sind, das hab ich gemeint.
Sorry wusste nicht das es noch mehr gibt, hab in einem Tutorial von euch nur 3 gesehen, darum hab ich gedacht es gibt nicht mehr. Ich werde aber aus der Erklärung von greedy im Handbuch trotzdem nicht schlau, könntest es mir kurz erklären was es bedeutet ???
Also mit print_r krieg ich zwar das "colspan" weg, aber ne wirklich Erklärung dafür warum alles hintereinander kommt obwohl ich s oder u gesetzt habe ist das nicht, hab ich eigentlich den modifier richtig gesetzt ???
thx schonmal
|

24-05-2005, 23:28
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
lass mich raten: du hast den code irgendwo abgepinnt, ohne zu verstehen, was passiert. anyway.
preg_match()/*_all() sind erstmal "gierig", d.h. es wird der grösstmögliche bereich erfasst. im fall von <td> ... </td> werden alle öffnenden und schliessenden tags zwischen dem ersten und letzten treffer ignoriert bzw. umfasst.
"ungreedy" (modifier U) unterdrückt das. das heisst, der kleinstmögl. bereich wird erfasst. während preg_match() nach dem ersten vorkommen aussteigt, packt preg_match_all() alle vorkommen/treffer in ein array.
grob erklärt (bin kein regex-perte).
wenn ich dein beispiel etwas abändere, erhalte ich ein völlig brauchbares ergebnis:
PHP-Code:
<?php
$t = '<tr>
<th colspan="6">Ressourcen</th>
</tr>
<tr>
<td colspan="3">Arbeiter</td>
<td colspan="3">76.215</td>
</tr>
<tr>
<td colspan="3">verfügbare Arbeitskräfte</td>
<td colspan="3">1.484</td>
</tr>
<tr>
<td colspan="3">Energie</td>
<td colspan="3">428.670</td>
</tr>
<tr>
<td colspan="3">Eisen</td>
<td colspan="3">101.452</td>
</tr>
<tr>
<td colspan="3">Silizium</td>
<td colspan="3">166.882</td>
</tr>
<tr>
<td colspan="3">Kohlenstoff</td>
<td colspan="3">26.567</td>
</tr>';
$startcode="%<td";
$endcode="</td>%U";
preg_match_all($startcode.'(.*)'.$endcode, $t, $was_raus_kommt);
echo '<pre>';
print_r($was_raus_kommt);
echo '</pre>';
?>
mach was draus.
__________________
-
|

24-05-2005, 23:44
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
Also erstmal danke, dass du versuchst mir zu helfen
bei deinem Code krieg ich jetzt folgenden Ergebnis:
Ressourcen Arbeiter 76.215 verfügbare Arbeitskräfte 1.484 Energie 428.670 Eisen 101.452 Silizium 166.882 Kohlenstoff 26.567 '; $startcode="%
';
print_r($was_raus_kommt);
echo '
'; ?>
im Prinzip krieg ich auch recht passable Ergebnisse, aber da die Werte danach noch in ne Datenbank sollen, hab ich eben das Problem, das ich se so net weiterverarbeiten kann.
Haben möchte ich eigentlich, dass ich 2 Werte auslese und diese dann in die Datenbank eintrage , damit ich das dann für alle Werte mit einer for-Schleife machen kann.
Was ich einfach nicht verstehe ist warum er nicht Zeilweise danach sucht, was ja eigentlich der Modifier s machen sollte. find das alles sehr vewirrend.
Und nein ich hab den Code nicht abgepinnt, ich weiß wie es funktionieren müsste, aber das tut es leider nicht so wie es soll
|

25-05-2005, 19:43
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
Also danke nochmal für die Hilfe, hab meine Fehler gefunden hab den Modifier ungreedy klein geschrieben anstatt groß, hätt ich mir gleich denken können
aber trotzdem danke für die Hilfe
|

26-05-2005, 16:28
|
|
Gagi
Newbie
|
|
Registriert seit: May 2005
Beiträge: 11
|
|
Jetzt brauch ich wohl doch wieder hilfe dazu, es klappt zwar dass alles richtig ausgelsen wird, aber beim 55. Element im Array hört er einfach auf, obwohl es keinen unterschied gibt im HTML code, gibts dafür irgendeine erklärung ????
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|