dreasMedlem sedan jan. 2004140 inlägg Hej!
Jag kan tänka mig att många där ute sitter och gottar sig med RegExp kunskaper och riktigt njuter av det som en skön sudoku. Men för oss dödliga är det en bunt hieroglyfer :OO
Jag skulle behöva hjälp med att lägga upp regexp för en preg_match_all med följande stycke som mall:
<a href="#" onMouseOver="ddrivetip('
<div class="cont">
<div class="top">
<div class="hlag">Lyon</div>
<div class="score">2-2</div>
<div class="blag">Fiorentina</div>
</div>
<div class="period border">(0-2)</div>
<div class="hgoal">
<div class="g2">73 Frédéric Piquionne </div>
<div class="varn">74 Karim Benzema</div>
<div class="g2">86 Karim Benzema </div>
</div>
<div class="bgoal">
<div class="g2">12 Alberto Gilardino </div>
<div class="g2">42 Alberto Gilardino </div>
<div class="varn">62 Dario Dainelli</div>
<div class="varn">68 Felipe Melo</div>
<div class="varn">74 Alberto Gilardino</div>
<div class="varn">90 Martin Jørgensen</div>
</div>
</div>
', 'lightyellow', 300)" onMouseOut="hideddrivetip()" onClick="return false;">info</a>
Det jag är intresserad av är att ta ut samtliga värden i de innersta div:arna samt vad dess class är satt till.
Jag har gjort ett miserabelt försök till regexp och det blev som följande:
preg_match_all("/<div(?:.)+class="cont"(?:.)*>(.)*</div>/", $body, $matches));
for ($i=0; $i<sizeof($matches); $i++) {
$divContent = $matches[$i][0];
}
Jag får Unknown modifier 'd' som felkod, men jag är ändå rätt säker på att jag är ute och cyklar, samt sjukt orolig för att ha " i koden.
Andreas
dreasMedlem sedan jan. 2004140 inlägg Hej igen!
Jag löste problemet med att sätta <\/div>, så preg:en ser ut på följande
preg_match_all("/<div(?:.)+class="cont"(?:.)*>(.)*</div>/", $body, $matches));
Den spottar nästan ut det jag vill - den ger mig innehållet, fast inte vad <div class="... "> är satt till (som även är av intresse).
Resultatet jag har nu är till exempel:
Celtic
0-0
Aalborg
(0-0)
17 Stephen McManus
70 Georgios Samaras
67 Andreas Johansson
80 Michael Beauchamp
Någon som har nåt bra förslag?
[EDIT: Alla matcher fanns i array:en, men vet fortfarande inte hur jag ska lösa <div class="... frågan]
effataMedlem sedan apr. 2008137 inlägg sätt () runt det du vill ha som en separat match. T.ex class="(\w+)"
Använd uttrycket:
'%<div.*class="(.*?)".*>(.*?)</div>%im'
(då du inte behöver kapslar in sånt du inte vill använda dig av du vill bara ha klassnamnet och vad som finns i diven om jag gissar rätt?
Då jag inte kan testa det men RegexBuddy skriver:
preg_match_all('%<div.*class="(.*?)".*>(.*?)</div>%im', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
# Matched text = $result[0][$i];
}
Så 0 kommer ge dig (om jag gissar rätt) klassnamnet och om du ändra 0 i #matched text till 1:a så får du ut texten.
dreasMedlem sedan jan. 2004140 inlägg Tack för svaren effata och voigtann1!
Jag provade bådas förslagen, men det visa sig att voigtann1 varianten fungerade bäst.
Jag får ut både klassnamnet och innehållet, däremot kom jag fram till att mitt upplägg inte var helt tillfredsställande. Det är anledningen till att jag har dröjt med mitt svar, då jag kontrollerat alternativa metoder samt hur jag egentligen bör lägga upp det.
Jag har kommit fram till att jag får tänka om lite med upplägget, för jag tror det går att lösa på något annat sätt då det blir väl krångligt att ha en hel klump text i varje array post. I princip måste man ju explode:a sönder varje del, och det känns lite overkill.
Skönt att ha fått känna på lite reg_exp iaf! Tack för hjälpen!