Re: Optimal Regex?

From: Date: Mon, 26 Sep 2005 22:34:49 +0000
Subject: Re: Optimal Regex?
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-223240@lists.php.net to get a copy of this message
keep it on the list please. and you still didn't answer the question :-) <snip>
preg_match_all($expression, "$string", $matches);
                                    ^-- why ? ...
    are you wrapping the variable in double quotes?
</snip>
...and also from your code: $string = (334,-53.44),(111,222); ^-- er what is this 'string' about? David Pollack wrote:
I added the $string and $expression variables at the last minue for readabilty, before I just had it all in the preg_match_all. I'm using a
ah but they were not valid code - which can confuse matters. try to post code that runs if you can (i.e. test if you're providing a testcase) .. i guess you have to kind of flip that argument inside out when it comes to enquiring whether something might be a bug - there is still testing involved tho. <garanteed-top-quality-sarcasm-free> have you ever used 'php -r' - it's brilliant - especially when you fund out how easy it is to cut and paste into a bash[-like] shell (probably using Putty if/when your on windows). be ware of single quotes. </garanteed-top-quality-sarcasm-free>
simple test file for this. I used your example and it returned two identical arrays with the correct information. Interesting.
maybe my regexp is not only bad but also wrong [for grepping coordinates in a 'any' variation of '( 123 ,-45.78)' ] ? $coordRE = "(?:[ ]?[-+]?\\d+(?:\\.\\d+)?[ ]?)"; $coordsRE = "#(\\({$coordRE},{$coordRE}\\))#"; var_dump($coordRE, $coordsRE); ========================================== moulin@moulin~ -- Tue Sep 27 00:24:20 $> php -r ' $> $coordRE = "(?:[ ]?[-+]?\\d+(?:\\.\\d+)?[ ]?)"; $> $coordsRE = "#(\\({$coordRE},{$coordRE}\\))#"; $> $> var_dump($coordRE, $coordsRE); $> $> ' string(30) "(?:[ ]?[-+]?\d+(?:\.\d+)?[ ]?)" string(69) "#(\((?:[ ]?[-+]?\d+(?:\.\d+)?[ ]?),(?:[ ]?[-+]?\d+(?:\.\d+)?[ ]?)\))#"
On 9/26/05, *Jochem Maas* <jochem@iamjochem.com <mailto:jochem@iamjochem.com> > wrote:
    David Pollack wrote:
I need to catch all instances of a coordinate in a give string.
    So far I
have this, which only works if the coordinate is in a certain format. $string = (334,-53.44),(111,222);
^-- er what is this 'string' about?
$expression = '([(][-]?[0-9]*[.0-9]*?,[-]?[0-9]*[.0-9]*?[)])';
    here's a horrid little bit of .... for you :)
<you could extract this code and run if you were really really bored>
    <?php
    $testStr = <<< EOD
\$string = (334,-53.44),(111,222); preg_match_all(\$expression, "\$string", \$matches); This returns the correct strings (334,- 53.44) and (111,222), but
    Id like
all formats to work. Like (111, 222), ( 111 , 222 ), (111, 222 ),
    etc, etc.
How would I change my regex to accomplish this?
    EOD;
    $coordRE = "(?:[ ]?[-+]?\\d+(?:\\.\\d+)?[ ]?)";
    $coordsRE = "#(\\({$coordRE},{$coordRE}\\))#";
    $matches = array();
    preg_match_all($coordsRE, $testStr, $matches);
    var_dump($testStr, $matches);
    ?>
</you could extract this code and run if you were really really bored>
preg_match_all($expression, "$string", $matches);
                                    ^-- why ? ...
    are you wrapping the variable in double quotes?
This returns the correct strings (334,-53.44) and (111,222), but
    I'd like
all formats to work. Like (111, 222), ( 111 , 222 ), (111, 222 ),
    etc, etc.
How would I change my regex to accomplish this? -- David Pollack DHPollack@gmail.com <mailto:DHPollack@gmail.com> www.atlspecials.com <http://www.atlspecials.com>
    <http://www.atlspecials.com>
www.da3.net <http://www.da3.net> <http://www.da3.net> -- David Pollack DHPollack@gmail.com <mailto:DHPollack@gmail.com> www.atlspecials.com <http://www.atlspecials.com> www.da3.net <http://www.da3.net>


« previous php.general (#223240) next »