30. oktober 2004 - 12:46
Der er
12 kommentarer og 1 løsning
preg_match substr
Hvordan matcher jeg alle forekomster af denne type streng: &33&&Werder Bremen&Hamburger SV& 1.55& 3.45& 4.70& altså: &(et heltal)&&(tekst og tal)&(tekst og tal)&(heltal.heltal)& (heltal.heltal)& (heltal.heltal)& Ved hjælp af PHP funktionen: preg_match?
Annonceindlæg fra Cognizant
30. oktober 2004 - 14:46
#1
Noget i den stil: $txt = "&33&&Werder Bremen&Hamburger SV& 1.55& 3.45& 4.70&"; preg_match_all( "/&(\d+)&&(([\d a-z]+)&){2}( (\d+\.\d+)&){3}/i", $txt, $matches ); echo "<pre>";var_dump( $matches );echo "</pre>";
30. oktober 2004 - 15:14
#2
Nej, det er ikke helt det jeg var ude efter. Det kan være jeg har formuleret mig for dårligt. Men det var ellers et fint regulært udtryk. Jeg prøver lige igen.
30. oktober 2004 - 15:20
#3
Se på denne fil:
http://www.daimi.au.dk/~fotex/diverse/odds.txt Den indeholder 5 linjer hvor de sidste 4, indeholder det som skal matches.
Jeg har derfor brug for at følgende bliver returneret, når man laver var_dump():
----------
array(128) {
[0]=>
array(1) {
[0]=>
string(38) "&01&&Ahlen&Karlsruhe& 1.80& 3.10& 3.70"
}
[1]=>
array(1) {
[0]=>
string(44) "&02&&Greuther Fürth&FC Køln& 2.20& 2.90& 2.85"
}
[2]=>
array(1) {
[0]=>
string(44) "&03&&Unterhaching&Frankfurt& 2.20& 2.90& 2.85"
}
........ osv..
}
30. oktober 2004 - 15:35
#4
Sådan? $txt = " &33&&Werder Bremen&Hamburger SV& 1.55& 3.45& 4.70 &01&&Ahlen&Karlsruhe& 1.80& 3.10& 3.70 &02&&Greuther Fürth&FC Køln& 2.20& 2.90& 2.85"; preg_match_all( "/(&\d+&&.+?&.+?& \d+\.\d+& \d+\.\d+& \d+\.\d+)/i", $txt, $matches ); echo "<pre>"; var_dump( $matches ); echo "</pre>";
30. oktober 2004 - 15:39
#5
Denne passer vist bedre: preg_match_all( "/(&\d+&&.+?&.+?&\s?\d+[\.,]\d+&\s?\d+[\.,]\d+&\s?\d+[\.,]\d+)/i", $txt, $matches );
30. oktober 2004 - 15:49
#6
Ja, den virker som den skal. (næsten) Der er bare en lille ting, som sikker er nem at rette. Når tallet kommer op over 99 ændrer den syntaks: &01&&Ahlen&Karlsruhe& 1.80& 3.10& 3.70 ... &99&&Deportivo La Corun&Albacete& 1.35& 3.80& 6.80 &100&Espanyol&Villarreal& 1.90& 3.10& 3.35 ^-- (Her er & erstattet med 0) Men det er vel ikke svært at rette? Smid lige et svar, så du kan få point.
30. oktober 2004 - 15:51
#7
Værsgo :) preg_match_all( "/(&\d{2}[&\d]&.+?&.+?&\s?\d+[\.,]\d+&\s?\d+[\.,]\d+&\s?\d+[\.,]\d+)/i", $txt, $matches );
30. oktober 2004 - 15:56
#8
Hov, så lige et særtilfælde mere: &08&&Esbjerg-Nordsjælla&under/over 5,5 & 2.00&& 1.55 Her mangler det midterste odds, altså 1 X 2, hvor X mangler. Det var vidst det hele. Jeg siger tusinde tak for din hjælp, og dit meget hutige svar.
30. oktober 2004 - 15:59
#9
Har du tid til lige at løse det sidste lille problem?
30. oktober 2004 - 17:19
#10
preg_match_all( "/(&\d{2}[&\d]&.+?&.+?&\s?\d+[\.,]\d+&\s?(\d+[\.,]\d+)?&\s?\d+[\.,]\d+)/i", $txt, $matches ); Havde du andet?
30. oktober 2004 - 17:33
#11
Nej, ikke med det, men har du en idé om hvorfor den returnerer et array hvor der står det samme flere gange? Ikke fordi det gør noget, men bare det undrer mig bare lidt: array(3) { [0]=> array(128) { [0]=> string(38) "&01&&Ahlen&Karlsruhe& 1.80& 3.10& 3.70" [1]=> string(45) "&02&&Greuther Fürth&FC Køln& 2.20& 2.90& 2.85" [2]=> ... } [1]=> array(128) { [0]=> string(38) "&01&&Ahlen&Karlsruhe& 1.80& 3.10& 3.70" [1]=> string(45) "&02&&Greuther Fürth&FC Køln& 2.20& 2.90& 2.85" ... } [2]=> array(128) { [0]=> string(4) "3.10" [1]=> string(4) "2.90" [2]=> string(4) "2.90" [3]=> string(4) "1.40" ... } }
30. oktober 2004 - 17:38
#12
Ja, når du ikke har parenteser er der kun ét array, er der et sæt parenteser, er der to arrays osv :) Du skal bruge nummer 1 (altså det andet array) $ditarray[1] :)
30. oktober 2004 - 17:47
#13
Ok, tak for det.
Vi tilbyder markedets bedste kurser inden for webudvikling