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



Reply via email to