Hey list,
I'm having problems with grouped alternative patterns.
The regex I would like to use, is the following:
/\s*(`?.+`?)\s*int\s*(\(([0-9]+)\))?\s*(unsigned)?\s*(((auto_increment)?\s*(primary\s*key)?)|((not\s*null)?\s*(default\s*(`.*`|[0-9]*)?)?))\s*/i
It matches this statement:
`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY
But not this:
`test4` INT(11) UNSIGNED NOT NULL DEFAULT 5
However, if I switch the alternatives, the first statement doesn't
match, but the second does.
FYI: In both cases, the column name and data type are matched, as expected.
It appears to be doing lazy evaluation on the pattern, even though every
resource I can find states that every alternative is tried in turn until
a match is found.
Any ideas on how this can be resolved would be greatly appreciated.
Here is some code:
<?php
$pattern1 =
'/\s*(`?.+`?)\s*int\s*(\(([0-9]+)\))?\s*(unsigned)?\s*(((auto_increment)?\s*(primary\s*key)?)|((not\s*null)?\s*(default\s*(`.*`|[0-9]*)?)?))\s*/i';
$pattern2 =
'/\s*(`?.+`?)\s*int\s*(\(([0-9]+)\))?\s*(unsigned)?\s*(((not\s*null)?\s*(default\s*(`.*`|[0-9]*)?)?)|((auto_increment)?\s*(primary\s*key)?))\s*/i';
$column1 = '`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY';
$column2 = '`test4` INT(11) UNSIGNED NOT NULL DEFAULT 5';
$matches = array();
preg_match($pattern1, $column1, $matches); print_r($matches); // match
preg_match($pattern1, $column2, $matches); print_r($matches); // doesn't
match
preg_match($pattern2, $column1, $matches); print_r($matches); // doesn't
match
preg_match($pattern2, $column2, $matches); print_r($matches); // match
?>
Greetz,
Stijn
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php