Простой вопрос по регулярным выражениям в PHP - PullRequest
0 голосов
/ 07 сентября 2010

Что наиболее эффективно preg_match регулярное выражение для следующего:

  1. Регулярное выражение должно соответствовать определенной строке (регистр нечувствителен )
  2. Может сопровождаться [или; , а затем что-то еще

Вот тестовые примеры для "foo":

  • foo -> хорошо
  • еда -> плохая
  • Foo; -> плохо, нужно что-то после;
  • FOO; бар -> хорошо
  • foo [bar] -> хорошо
  • foo [-> плохо, нужно что-то после]
  • fOo [bar] 1; 2; 3 -> хорошо

Это мой тестовый код:

<?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;
}

?>

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Простой:

/foo($|[[;].)/i
2 голосов
/ 07 сентября 2010

Вы можете попробовать это регулярное выражение:

/foo(;.+?|\[.+?\].*?)*$/i

Если ваш кронштейн не нужно закрывать:

/foo([;\[].+?)*$/i

Если ваша скобка или точка с запятой не должны быть последней частью вашего выражения:

/foo([;\[][^;\[]+)*$/i

Все прошли испытания с Regex planet .


Ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...