Hi David, 2 weeks ago Hartmut Holzgraefe had similar idea : switch ($data, "preg_match") { case '/foo.*?bar/i' : /* computation here */ break; }
The second argument is a callback.
Andrey
David Sklar wrote:
I was thinking about adding one or two regex-related features to the engine:
1. "preg_case": this would behave just like case but instead of doing an equality comparison, would match against a regular expression, e.g.
switch($data) { preg_case '/^\d{5}(-\d{4})?$/': print "US Postal Code"; break; preg_case '/^[a-z]\d[a-z] ?\d[a-z]\d$/i'; print "Canadian Postal Code"; break; default: print "something else!"; }
Where should any captured subpatterns go?
2. A regex match operator that returns an array containing subpatterns. If there is no match against the regex, then an empty array (or just false?) would be returned.
if ($data =~ '/^(\d{5})(-\d{4})?$/') { print "The whole postal code is $data[0]."; print "The first five digits is $data[1]."; if ($data[2]) { print "The ZIP+4 is $data[2].";} }
Some issues with adding these features:
- It creates an engine dependency on the PCRE library. - There would have to be some new opcodes and parser tokens - Ideally the code that implements these operators could share as much as possible with what's already been done in the PCRE extension -- is that possible?
Comments?
Thanks, David
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php