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

Reply via email to