regex operators
| From: | David Sklar | Date: | Tue, 14 Oct 2003 14:47:19 +0000 |
| Subject: | regex operators | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-4825@lists.php.net to get a copy of this message | ||
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