[Gllug] OT: Regular Expression Help Needed Please

Mike Leigh MikeL at hornbill.com
Thu Oct 7 14:52:00 UTC 2004


Thanks

I will attempt to convert to php syntax and see what I can come up with

Mike

-----Original Message-----
From: Garry Heaton [mailto:garry at heaton6.freeserve.co.uk]
Sent: 07 October 2004 15:46
To: Greater London Linux Users Group
Subject: Re: [Gllug] OT: Regular Expression Help Needed Please


Mike Leigh wrote:

> Hi,
> 
> I am not sure why fgetcsv is not giving me the correct results but it
seems
> to be ignoring the optional string enclosure.  If I have a line with just
> commas then fgetcsv will work as expected.  If I have a line with " and ,
> then fgetcsv give strange results in the array.  Thats why I wrote the
regex
> version.
> 
> Below is the code I wrote to do what fgetcsv does.
> 
> 	$file = file_get_contents($config["csv_file"]);
> 	$old_array = explode("\n", $file);
> 	$data = array();
> 	foreach ($old_array as $line) {
> 		//remove commas from within quotation marks. e.g. from
> [this,",,i,s,, a,",string] to [this,"is a",string]
> 		if (preg_match("/\"[\d\D]*,+[\d\D]*\"/",$line, $matches)) {
> 			$line = str_replace($matches[0], str_replace(",",
> "", $matches[0]), $line);
> 		}
> 		$data[] = $line;
> 	}
> 	for ($i = 0; $i <= count($data) -1; $i++) {
> 		$data[$i] = explode(",", $data[$i]);
> 		
> 	}
> This gives the same output as fgetcsv.  All I need to fix is the regex and
> then start hammering fgetcsv and my replacement with test cases to try and
> see where fgetcsv goes astray.
> 
> Mike

Off the top of my head this Perl would get rid of the double-quoted commas:

$line =~ s/"[,([^,]*)]+"/"$1"/g;

Try massaging it into PHP.

Regards

Garry





-- 
Gllug mailing list  -  Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug
-- 
Gllug mailing list  -  Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug




More information about the GLLUG mailing list