PHP Preg_match соответствует точное слово - PullRequest
4 голосов
/ 29 ноября 2010

Я сохранил как | 1 | 7 | 11 | Мне нужно использовать preg_match, чтобы проверить | 7 | там или | 11 | есть ли и т. д. Как мне это сделать?

Ответы [ 4 ]

25 голосов
/ 29 ноября 2010

Используйте \b до и после выражения, чтобы сопоставить его только с целым словом:

$str1 = 'foo bar';       // has matches (foo, bar)
$str2 = 'barman foobar'; // no matches

$test1 = preg_match('/\b(foo|bar)\b/', $str1);
$test2 = preg_match('/\b(foo|bar)\b/', $str2);

var_dump($test1); // 1
var_dump($test2); // 0

Итак, в вашем примере это будет:

$str1 = '|1|77|111|';  // has matches (1)
$str2 = '|01|77|111|'; // no matches

$test1 = preg_match('/\b(1|7|11)\b/', $str1);
$test2 = preg_match('/\b(1|7|11)\b/', $str2);

var_dump($test1); // 1
var_dump($test2); // 0
2 голосов
/ 29 ноября 2010

Используйте более быстрые strpos , если вам нужно только проверить наличие двух чисел.

if(strpos($mystring, '|7|') !== FALSE AND strpos($mystring, '|11|') !== FALSE)
{
    // Found them
}

Или используя более медленное регулярное выражение для захвата числа

preg_match('/\|(7|11)\|/', $mystring, $match);

Используйте регулярное выражение , чтобы бесплатно проверить регулярные выражения.

0 голосов
/ 29 ноября 2010

Предполагая, что ваша строка всегда начинается и заканчивается |:

strpos($string, '|'.$number.'|'));
0 голосов
/ 29 ноября 2010

Если вы действительно хотите использовать preg_match (хотя я рекомендую strpos, как в ответе Xeoncross), используйте это:

if (preg_match('/\|(7|11)\|/', $string))
{
    //found
}
...