27. oktober 2010 - 12:58
Der er
34 kommentarer og 1 løsning
Preg_match pattern
<? //Get file contents $text = file_get_contents('curl.txt') or die('error reading file'); //echo nl2br(htmlspecialchars($text)); //Date and time setup $date = date("j/n-o"); $hour = date("G"); $min = date("i"); //prepare for loop $results = 0; while($results == 0){ //Look for this pattern in the string $pattern = '/title="'.$date.' '.$hour.':(.*?)>/'; echo $pattern; //Perfom the preg_match preg_match($pattern, $text, $matches); //print the array print_r($matches); //just for now, add 1 to $results, to prevent loop $results++; } ?> Melder ingenting. Jeg har lokaliseret til, ikke overraskende, at være i mit pattern. Hvad skal den omformuleres til? Det er første gang jeg arbejder med preg_match...
Annonceindlæg fra Infor
27. oktober 2010 - 13:18
#1
det kommer jo helt an på hvad du skal finde i filen...
27. oktober 2010 - 13:22
#2
title="'.$date.' '.$hour.':(.*?)"> Den skulle gerne finde den fulde titel, hvor title = f.eks 27/10-2010 8:** osv.
27. oktober 2010 - 13:28
#3
har du prøvet at udskrive $pattern, for at se om den skriver variablerne korrekt?
27. oktober 2010 - 13:29
#4
Noget i stilen af det her? /title\s*?=\s*?\d{2}\/\s{2}\-\d{4}\s\d{1,2}\:\d{1,2}/
27. oktober 2010 - 13:32
#5
Jeg ved ikke helt præcis hvordan variablen skal se ud, det er det der er mit problem. Jannick, det skal jo være med de data jeg har sat tidligere?
27. oktober 2010 - 13:35
#6
Tror jeg skal have en forklaring på hvad det egentligt er du gerne vil matche for det kan jeg godt nok ikke se ud fra din kode :)
27. oktober 2010 - 13:38
#7
Jeg har gennem cURL hentet kildekoden fra en side. Jeg vil nu gerne hente titlen hvor titlen starter med f.eks. 27/10-2010 8:
27. oktober 2010 - 13:45
#8
- Titlen på hvad? - Skal den matche alle datoer med det format uanset datoen og tidspunktet eller hvor du specificerer dato og tidspunkt? - Hvorfor har du overhovedet en while løkke wrappet om din preg_match, eftersom koden i den kun bliver ekserkveret én gang da result er lig med 0 før løkken, og løkken skal køre så længe result er lig med 0 men result jo allerede bliver lig med 1 efter første ekserkvering hvor løkken så stopper.
27. oktober 2010 - 13:53
#9
- title er på et anchor tag, men det mener jeg er underordnet - Den skal matche det dato og tidspunkt jeg angiver, ellers ville jeg nok ikke sætte værdierne, og så bruge dem :) - Det er til videre udvikling.
27. oktober 2010 - 13:54
#10
variablen pattern skulle gerne se ud som: title="27/10-2010 13:(.*?)"> sådan ca... og den matcher så en streng der ser f.eks. således ud: title="27/10-2010 13:55"> så hvis din streng i filen ikke ser sådan ud, giver det mening, at du ikke får det forventede resultat :)
27. oktober 2010 - 13:56
#11
og ja, der kan selvfølgelig stå alverden mellem 13: og ">
27. oktober 2010 - 13:58
#12
Pattern ser sådan der ud. Og titlen ser sådan der ud, dog bare med noget mere mellem 55 og "
27. oktober 2010 - 14:04
#13
Prøv den her /title\=".$date."\s".$hour."\:\d{1,2}\s*?.*?[^\<]\"\>/
27. oktober 2010 - 14:08
#14
jeg tror at problemet er at du har en skråstreg i din dato - denne skal escapes med en backslash, når du bruger den i dit pattern. du kan jo lige prøve at lave datoen som denne streng for test: 27\/10-2010 og se om det hjælper...
27. oktober 2010 - 14:12
#15
Kom jeg også lige i tanke om, men det er ikke kun skråstreg, det er alle specialtegn, også bindestregen mellem måned og år.
27. oktober 2010 - 14:13
#16
Warning: preg_match(): Unknown modifier '1' in /customers/kentora.dk/kentora.dk/httpd.www/curl/regexp.php on line 23
27. oktober 2010 - 14:14
#17
bindestregen driller ikke... men skråstregen får 1-tallet i 10 til at fremstå som en parameter i pattern'et og det er det ikke...
27. oktober 2010 - 14:14
#18
og hvordan se dit pattern ud nu, når du udskriver det?
27. oktober 2010 - 14:18
#19
Efter at have sat $date til strengen 27\/10-2010, istedet for date("j\/n-o"), så siger den array(). Hvordan får jeg det nu gjort dynamisk?
27. oktober 2010 - 14:18
#20
<? $text = file_get_contents('curl.txt') or die('error reading file'); //echo nl2br(htmlspecialchars($text)); $date = date("j/n-o"); $day = date("j"); $month = date("n"); $year = date("o"); $hour = date("G"); $min = date("i"); $results = 0; while($results == 0){ $pattern = "/title=" . $day . "\/" . $month . "-" . $year . "\s" . $hour . ":\d{1,2}\s*?.*?[^<]\"\>/"; echo $pattern; preg_match($pattern, $text, $matches); print_r($matches); $results++; } ?>
27. oktober 2010 - 14:24
#21
Nu kommer den igen med array(), men har sat hour til 8, og her skulle den altså gerne komme med et resultat. Titlen den gerne skulle komme frem med er: title="25/10-2010 08:15 til 9:45 Hold: 3g Id...">
27. oktober 2010 - 14:26
#22
hov, ikke den der.. title="27/10-2010 08:15 til 9:45 Hold: 3g eø.. ">
27. oktober 2010 - 14:28
#23
Den skulle også gerne komme med et tomt array eftersom den ikke finder nogle resultater. Men prøv med $pattern = "/title=\"" . $day . "\/" . $month . "-" . $year . "\s" . $hour . ":\d{1,2}\"\s*?.*?[^<]>/";
27. oktober 2010 - 14:32
#24
Mit pattern er nu: /title="27\/10-2010\s8:\d{1,2}"\s*?.*?[^<]>/ Jeg får stadig en tom array.
27. oktober 2010 - 14:34
#25
Den her skulle meget gerne virke, er først gået op for mig nu at der godt må stå noget efter tidspunktet hvilket ovenstående pattern ikke tillader. Den her skulle gerne fungere $pattern = "/title=\"" . $day . "\/" . $month . "-" . $year . "\s" . $hour . ":\d{1,2}.*?\".*?[^<]>/";
27. oktober 2010 - 14:37
#26
Men jeg har også lige lagt mærke til at den streng du gerne vil matche har 0 foran tidspunktet og det tillader ovenstående pattern heller ikke.
27. oktober 2010 - 14:37
#27
Hmm.. stadig tom. Sjal der sættes noget ind for at der skal være mellemrum mellem år og timer?
27. oktober 2010 - 14:42
#28
Prøv nu $day = date("d"); $month = date("m"); $year = date("Y"); $hour = date("H"); $min = date("i");
27. oktober 2010 - 15:07
#29
Når jeg echoer pattern og kører preg_match, siger den: /title="27\/10-2010\s15:\d{1,2}.*?".*?[^<]>/Array ( )
27. oktober 2010 - 15:34
#30
Nu virker det, har selv testet og du kan jo selv tjekke/teste min kode <div style="font-family: verdana; font-size: 12px;"> <?php $day = date("d"); $month = date("m"); $year = date("Y"); $hour = date("H"); $min = date("i"); $text = "title=\"" . $day . "/" . $month . "-" . $year . " " . $hour . ":15 til 9:45 Hold: 3g e&\#248;.. \">"; $pattern = "/title=\"" . $day . "\/" . $month . "\-" . $year . "\s" . $hour . ":\d{1,2}(\s*?.*?\s*?.*?)\">/i"; echo $pattern . "<br /><br />"; if (preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE)) { echo "True<br /><br />"; } else { echo "False<br /><br />"; } print_r($matches); ?> </div>
27. oktober 2010 - 15:44
#31
Min kode hedder nu: <? //$text = file_get_contents('curl.txt') or die('error reading file'); //echo nl2br(htmlspecialchars($text)); $text = '.91em; left:0.55em;width:9.09em;height:5.73em;word-wrap:break-word;" title="27/10-2010 08:15 til 9:45 Hold: 3g eø..'; $day = date("d"); $month = date("m"); $year = date("Y"); //$hour = date("H"); $hour = "08"; $min = date("i"); $results = 0; while($results == 0){ $pattern = "/title=\"" . $day . "\/" . $month . "\-" . $year . "\s" . $hour . ":\d{1,2}(\s*?.*?\s*?.*?)\">/i"; echo $pattern; preg_match($pattern, $text, $matches, PREG_OFFSET_CAPTURE); print_r($matches); $results++; } ?> men virker ikke. Den returnerer et tomt array, og det pattern den kommer med hedder: /title="27\/10\-2010\s08:\d{1,2}(\s*?.*?\s*?.*?)">/i
27. oktober 2010 - 15:52
#32
$text = '.91em; left:0.55em;width:9.09em;height:5.73em;word-wrap:break-word;" title="27/10-2010 08:15 til 9:45 Hold: 3g eø..'; Jeg kan ikke finde slut double-quoten for title attributen ud fra det her, prøv og giv mig HTML'en for en "hel match", start tag til slut tag.
27. oktober 2010 - 15:53
#33
Og forklar mig hvilken del af title attributen's værdi du gerne vil have pillet ud derfra.
27. oktober 2010 - 17:08
#34
Arh. Du har ret, jeg havde glemt at slutte title og tag af. Nu virker det! Mange tak :) Du får point! :D
27. oktober 2010 - 18:33
#35
selv tak...
Vi tilbyder markedets bedste kurser inden for webudvikling