Re: Regular Expression Backreference in subpattern.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux