cmkMedlem sedan mars 2001325 inlägg Jag har en variabel som innehåller en koden till en HTML-sida. Ur denna vill jag plocka ur viss data. Måste man använda regujära uttryck för detta? I stort sätt ser filen ut så här:
<td>Datum: 040404</td>
Det jag vill ha ut är självklart själva datumet, 040404.
Hur löser man det smidigast?
MatteMedlem sedan aug. 20002 975 inlägg preg_match_all("/\\d{6}/", $var, $matches);
Sen har du dina datum i arrayen $matches[0].
MatteMedlem sedan aug. 20002 975 inlägg Det var från en htmlsida sa du. Då har du säkert många färgkoder.
Testa istället:
preg_match_all("/<td>Datum: (\\d{6})<\\/td>/", $var, $matches);
Hämta istället från arrayen $matches[1].
cmkMedlem sedan mars 2001325 inlägg Oj... jag var kanske lite otydlig. Filen innehåller inte enbart datum utan ser snarare ut så här (plus lite färgkoder och liknande som du nämnde Matte):
<td>Datum</td>
<td>:</td>
<td>040506</td>
<td>Plats</td>
<td>:</td>
<td>Webforum :)</td>
<td>kommentar</td>
<td>:</td>
<td>hej hopp... här kan det stå en söt liten kommentar :-)</td>
osv...
Totalt är det 8st olika data som jag vill plocka ut. Hoppas jag var lite tydligare denna gången :)
/ Martin
MatteMedlem sedan aug. 20002 975 inlägg Ser det likadant ut på alla ställen som där borde det funka med:
preg_match_all("/<td>(\\d{6})<\\/td>/", $var, $matches);
cmkMedlem sedan mars 2001325 inlägg
Matte skrev:
Ser det likadant ut på alla ställen som där borde det funka med:
preg_match_all("/<td>(\\d{6})<\\/td>/", $var, $matches);
Men denna funktionen matchar enbart datum väl? Om du kollar in exemplet ovan så vill jag kunna få ut både datum, plats och kommentar.
Jag har funderat lite och kommit fram till följande. Kan man inte söka efter tex "<td>Kommentar:" och sedan kopiera in alla tecken efter detta fram till och med te.x. "</td>". Så man anger ett startvärde och ett slutvärde och kopierar allt därimellan liksom :)
/ Martin
MatteMedlem sedan aug. 20002 975 inlägg Missade att du ville ha mer än datum :)
Testa det här:
$pattern = "/<td>Datum<\\/td>\\s+<td>:<\\/td>\\s+<td>(\\d{6})<\\/td>\s+";
$pattern .= "<td>Plats<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>\s+";
$pattern .= "<td>kommentar<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>/is";
preg_match_all($pattern, $var, $matches, PREG_SET_ORDER);
foreach ($matches as $row) {
echo "$row[1] - $row[2] - $row[3] <br>";
}
cmkMedlem sedan mars 2001325 inlägg
Matte skrev:
Missade att du ville ha mer än datum :)
Testa det här:
$pattern = "/<td>Datum<\\/td>\\s+<td>:<\\/td>\\s+<td>(\\d{6})<\\/td>\s+";
$pattern .= "<td>Plats<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>\s+";
$pattern .= "<td>kommentar<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>/is";
preg_match_all($pattern, $var, $matches, PREG_SET_ORDER);
foreach ($matches as $row) {
echo "$row[1] - $row[2] - $row[3] <br>";
}
*Hmmmmm* Borde inte koden nedan fungera då?
<?php
$var = "<td>Datum</td>
<td>:</td>
<td>050607</td>
<td>Plats</td>
<td>:</td>
<td>webforum</td>
<td>kommentar</td>
<td>:</td>
<td>hej</td>";
$pattern = "/<td>Datum<\/td>\s+<td>:<\/td>\s+<td>(\d{6})<\/td>s+";
$pattern .= "<td>Plats<\/td>\s+<td>:<\/td>\s+<td>(.*?)<\/td>s+";
$pattern .= "<td>kommentar<\/td>\s+<td>:<\/td>\s+<td>(.*?)<\/td>/is";
preg_match_all($pattern, $var, $matches, PREG_SET_ORDER);
echo "BOF";
foreach ($matches as $row) {
echo "$row[1] - $row[2] - $row[3] <br>";
}
echo "EOF";
?>
...eller har jag gjort något fel? Det var ett tag sedan jag pillade med PHP nu :)
Det enda som skrivs ut är "BOFEOF" x(
MatteMedlem sedan aug. 20002 975 inlägg Missade att dubbelmarkera några tecken som forumet strippar, så här skulle det vara:
$pattern = "/<td>Datum<\\/td>\\s+<td>:<\\/td>\\s+<td>(\\d{6})<\\/td>\\s+";
$pattern .= "<td>Plats<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>\\s+";
$pattern .= "<td>kommentar<\\/td>\\s+<td>:<\\/td>\\s+<td>(.*?)<\\/td>/is";
preg_match_all($pattern, $var, $matches, PREG_SET_ORDER);
foreach ($matches as $row) {
echo "$row[1] - $row[2] - $row[3] <br>";
}
cmkMedlem sedan mars 2001325 inlägg Fungerade jättebra! :)
En liten undran bara... vad står "\s+" för?
SkarreMedlem sedan apr. 20012 427 inlägg
cmk skrev:
En liten undran bara... vad står "\s+" för?
http://se2.php.net/pcre.pattern.syntax
MatteMedlem sedan aug. 20002 975 inlägg
cmk skrev:
Fungerade jättebra! :)
En liten undran bara... vad står "\s+" för?
\s betyder "space"-tecken typ mellanslag, tab eller radbrytning.
+ säger ett eller flera.