What's the most efficient preg_match regular expression for the following:
- The regular expression must match a certain string (case insensitive)
- Can be followed by [ or ; and then something else
These are the test cases for "foo":
- foo --> good
- food --> bad
- foo; --> bad, need something after ;
- FOO;bar --> good
- foo[bar] --> good
- foo[ --> bad, need something after ]
- fOo[bar]1;2;3 --> good
This is my test code:
<?php
$tests = array();
$tests[] = 'foo';
$tests[] = 'food';
$tests[] = 'foo;';
$tests[] = 'FOO;bar';
$tests[] = 'foo[bar]';
$tests[] = 'foo[';
$tests[] = 'foo[]';
$tests[] = 'fOo[bar]1;2;3';
foreach ($tests as $test)
{
echo $test, ' --> ';
$found = preg_match('REGULAR EXPRESSION HERE', $test);
if ($found === false || $found < 1)
echo 'bad';
else
echo 'ok';
echo '<br>', PHP_EOL;
}开发者_开发知识库
?>
You can try this regex :
/foo(;.+?|\[.+?\].*?)*$/i
If your bracket doesn't need to be closed :
/foo([;\[].+?)*$/i
If your bracket or semicolon must not be the last part of your expression :
/foo([;\[][^;\[]+)*$/i
All passed the tests with Regex planet.
Resources :
- www.regular-expressions.info
Simple:
/foo($|[[;].)/i
精彩评论