2010-11-29 2 views

ответ

2

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

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

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

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

Использование regexpal для проверки регулярных выражений бесплатно.

+0

Это также возвращает значение TRUE для чисел, как 17, 27, 71 и 111, 211 и 114, чтобы назвать несколько – Yeroon 2010-11-29 15:22:16

+0

Спасибо, это гораздо более простой способ и работает! – ITg 2010-11-29 15:22:51

0

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

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

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

strpos($string, '|'.$number.'|')); 
17

использования \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