Re: Regular Expression Backreference in subpattern.

From: Date: Sat, 27 Sep 2008 19:49:42 +0000
Subject: Re: Regular Expression Backreference in subpattern.
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-281054@lists.php.net to get a copy of this message
Shiplu wrote:
The string is "<td>charge</td><td>100</td>". I want and array( "charge"=>100). I am using this regular expression, '/<td>([^<]+)<\/td><td>(?P<\1>\d+)<\/td>/'. But its not working.. I get this error., PHP Warning: preg_match(): Compilation failed: syntax error after (?P at offset 25 in E:\src\php\WebEngine\- on line 4 any idea?
it seem's everybody is giving you the same answers; here's a definitive look at the problem (as far as I'm aware) all preg_* functions can only return back string's, or array's of strings; there is no method of returning back an associative array as you would like; the closest you can get is by using preg_replace or preg_replace_callback as follows: print_r( preg_replace_callback('|<td>(.*)</td><td>(\d+)</td>|', create_function(
            '$matches',
            'return array($matches[0],$matches[1]);'
        ), $string) );
this will fall as the internals of preg* casts the array to a string alternative: print_r( preg_replace('|<td>(.*)</td><td>(\d+)</td>|e', 'array("$1","$2")', $string) ); this will also fail as the internals of preg* casts the array to a string. similarly all other options you could go down such as simple explodes, strip_tags or even more complex stream filters will only allow you to return strings, or numerical array's of strings. This leaves you high and dry I'm afraid - the only thing for it is to create a simple function to handle this for you; something like function td_thing( $string ) { $a = preg_replace('|<td>(.*)</td><td>(\d+)</td>|e', '$1 $2', $string); $b = explode(' ', $a); return array("$b[0]" => "$b[1]); } maybe just maybe you or I or somebody else can find a way to do this easily in one line; but for now a function similar to above is the best you can do.. Regards Nathan

« previous php.general (#281054) next »