Jack Bates wrote: > 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 Perhaps this would be easier with preg_match_all() which allows you to do a global match. Then traverse the resulting array matches. The square brackets do make the problem a little tougher since you can get into recursion. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php