22. januar 2010 - 14:38 
												Der er
									8  kommentarer													og 					1  løsning									 
									
		 
		
			
regular expression, specialtegn 
			hey, Jeg vil gerne matche følgende streng (eksempel): "21-01-2010 12:00:00     93,15" (det store mellemrum er tabulator, hvis nogen skulle være i tvivl...) jeg har prøvet: if (preg_match("/(\d+)\S(\d+)\S(\d+).(\d+):(\d+):(\d+)\t(\d+)\S(\d+)",$data)) { //blah } intet synes at fange kolon mellem time, minut, sekund... har også prøvet at fange netop dem  som [\:] som \:  som :{1}  som snart hvad som helst... Jeg kan sq ikke få den til at makke ret og er ved at få grå hår af det... nogle regex-hajer derude med et par forslag? :P
					
		
	 
                            
Annonceindlæg fra NetNordic 
 
 
	
		
								
					
				22. januar 2010 - 15:52  
				#1 
						
		 
		
			jeg har imellemtiden fundet ud af, at det nok ikke er kolon, der fejler, men timen (og evt sekundet, men så langt når den ikke), dvs 12:00  :00
		
		
	 
	
		
								
					
				22. januar 2010 - 16:41  
				#2 
						
		 
		
			en ny opdagelse! Jeg tror, det hele skyldes, at jeg åbner en windows-genereret tekstfil på en linux maskine. Jeg bruger fopen($file, 'r') til at åbne den med.
		
		
	 
	
		
								
					
				22. januar 2010 - 21:02  
				#3 
			 				 
						
		 
		
			Skriv den direkte om: $t = "21-01-2010 12:00:00    93,15"; $p = "/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\t([\d,]+)/"; if ( preg_match( $p, $t, $m ) ) {     echo "Match"; } else {     echo "Ingen match"; } Virker (såfremt du er sikker på at det store mellemrum er \t ;)
		
		
	 
	
		
								
					
				25. januar 2010 - 10:43  
				#4 
						
		 
		
			jeg har nu rettet min kode til efter ovenstående forslag: if (preg_match("/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\t([\d,]+)/", $data)) { //min kode. } else { echo "line mismatch\n"; } jeg får output "line mismatch ..." for alle datalinierne. jeg tror som tidligere nævnt, at problemet skyldes, at filen er genereret i windows, og delt herpå. Mappen bliver så mountet på min linux, som så prøver at læse indholdet. Hvis jeg åbner filen med nano, ser indholdet således ud: ^@2^@0^@-^@0^@1^@-^@2^@0^@1^@0^@ ^@2^@1^@:^@0^@0^@:^@0^@0^@    ^@2^@8^@3^@2^@,^@2^@8^@0^@0 som så svarer til 20-01-2010 21:00:00    2832,2800
		
		
	 
	
		
								
					
				25. januar 2010 - 13:02  
				#5 
			 				 
						
		 
		
			Hmm prøv at køre en: $data = utf8_decode( $data ); før...
		
		
	 
	
	
	
		
								
					
				25. januar 2010 - 13:21  
				#6 
						
		 
		
			nu ser min kode sådan ud: $data = utf8_decode($data); if (preg_match("/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\t([\d,]+)/", $data)) { //min kode. } else { echo "line mismatch\n"; } får mismatches stadigvæk...
		
		
	 
	
		
								
					
				25. januar 2010 - 13:33  
				#7 
			 				 
						
		 
		
			Prøv en  var_dump( $data ); efter utf8_decode'en så vi lige kan se hvad PHP siger der er i $data...
		
		
	 
	
		
								
					
				26. januar 2010 - 16:04  
				#8 
						
		 
		
			Jeg har lavet følgende tests: var_dump($day); var_dump($month); var_dump($year); var_dump($hour); var_dump($minute); var_dump($second); Ovenstående giver (eksempelvis): string(4) "24" string(5) "01" string(9) "2010" string(5) "13" string(5) "01" string(5) "13" Jeg prøver så at parse værdierne: echo "hour: $hour, minute: $minute, second: $second, month: $month, day: $day, year: $year\n"; echo "(int)hour: ".(int)$hour.", (int)minute: ".(int)$minute.", (int)second: ".(int)$second.", (int)month: ".(int)$month.", (int)day: ".(int)$day.", (int)year: ".(int)$year."\n"; Ovenstående giver hour: 13, minute: 01, second: 13, month: 01, day: 24, year: 2010 (int)hour: 0, (int)minute: 0, (int)second: 0, (int)month: 0, (int)day: 2, (int)year: 0
		
		
	 
	
		
								
					
				24. februar 2010 - 15:53  
				#9 
						
		 
		
			løsningen måtte findes i '\0', der var foran hvert tegn...
		
		
	 
	
		
	
		
		
		
			
			Vi tilbyder markedets bedste kurser inden for webudvikling