One thing that I suppose you get by using "case preg_match()" like George does below (as opposed to my preg_case operator or Hartmut's callback) is you can deal with arbitrary arguments to the preg_match() (or other) function -- storing captured subpatterns from the regex, for example.
David On Tuesday, October 14, 2003 11:04 AM, mailto:[EMAIL PROTECTED] wrote: > Aesthetics aside, how is that different in effect from: > > switch(true) { > case preg_match('/foo.*?bar/i', $data): > /** stuff **/ > break; > case preg_match('/baz/', $data); > /** other stuff **/ > break; > default: > break; > } > > ? > > On Tuesday, October 14, 2003, at 10:58 AM, Andrey Hristov wrote: > >> 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 >> >> > -- George Schlossnagle > -- Principal Consultant > -- OmniTI Computer Consulting, Inc. > -- +1.410.872.4910 x202 > -- 1024D/1100A5A0 1370 F70A 9365 96C9 2F5E 56C2 B2B9 262F 1100 A5A0 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php