[pcre] backreferences to all matches of a repeated subexpression

From: Date: Thu, 02 Aug 2007 03:05:09 +0000
Subject: [pcre] backreferences to all matches of a repeated subexpression
Groups: php.general 
Request: Send a blank email to php-general+get-260040@lists.php.net to get a copy of this message
I'm trying to pull all the components out of strings structured like: word followed by any number of ( dot word or square bracketed string ) This is an example: foo.bar[ab.cd].baz From the above example, I want: array('foo', 'bar', 'ab.cd', 'baz'); A regular expression to match these strings, including parenthesis around the parts I want to pull out: preg_match('/(^\w+)(?:\.(\w+)|\[([^]]+)\])*/', $subject, $matches); However applied to the above example: $matches[1] = 'foo'; // First subexpression $matches[2] = 'baz'; // Last value of second subexpression $matches[3] = 'ab.cd'; // Last value of third subexpression I'm not sure how to get an array of all subexpression matches, in the order matches appear in the subject, instead of the order expressions appear in the pattern. I think I might be able to do something using the Perl (?{code}) construction, e.g. ...(?:\.(\w+)(?{$parts[] = \2})|\[([^]]+)(?{$parts[] = \3})\])*... but I haven't thought about it too much because PHP doesn't support this construction. Any ideas much appreciated. Thanks, Jack

« previous php.general (#260040) next »