匹配一串用竖线分隔、用竖线包裹的整数中的两个整数之一

问题描述 投票:0回答:4

我已存储为

|1|7|11|

我需要使用

preg_match((
来检查
|7|
是否存在或
|11|
是否存在等

我该怎么做?

php regex validation preg-match delimited
4个回答
30
投票

在表达式前后使用

\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
投票

如果您只需要检查两个数字是否存在,请使用更快的strpos

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

或者使用较慢的正则表达式来捕获数字

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

使用 regexpal 免费测试正则表达式。


0
投票

假设您的字符串始终以

|
:

开头和结尾
strpos($string, '|'.$number.'|'));

0
投票

如果你真的想使用

preg_match
(尽管我推荐
strpos
,就像Xeoncross的答案),请使用这个:

if (preg_match('/\|(7|11)\|/', $string))
{
    //found
}
© www.soinside.com 2019 - 2024. All rights reserved.