php preg_match_all没有具体的数字

时间:2012-08-23 15:47:12

标签: php regex preg-match-all

我想从像569048004801这样的数字字符串中排除像4800这样的特定数字。 我正在使用php和方法preg_match_all我尝试了一些模式的例子:

/([^4])([^8])([^0])([^0])/i
/([^4800])/i

3 个答案:

答案 0 :(得分:3)

如果您只想查看字符串是否包含4800,则不需要正则表达式:

<?php

$string = '569048004801';

if(strpos($string,'4800') === false){
  echo '4800 was not found in the string';
}
else{
  echo '4800 was found in the string'; 
}

有关documentation here

中strpos的更多信息

答案 1 :(得分:2)

如果您的意思是简单地想要从字符串中删除4800,则使用str_replace会更容易:

$str = '569048004801';
$str = str_replace('4800', '', $str);

另一方面,如果您的意思是想知道特定的数字字符串是否包含4800,那么这将为您测试:

$str = '569048004801';

if (preg_match_all('/4800/', $str) > 0) {
    echo 'String contains 4800.';
} else {
    echo 'String does not contain 4800.';
}

答案 2 :(得分:1)

/([^4])([^8])([^0])([^0])/i

这实际上是说,一个四个字符的序列,不是“4800”。关闭。

/([^4800])/i

实际上,单个字符不是'4','8'或'0'

假设你想要捕获一个不包含“4800”的数字,我想你可能想要

/(?!\d*4800)\d+/i

这就是说,首先检查我们是不是在某处看到一串带有“4800”的数字,如果是这种情况,请抓取数字串。它被称为“负面前瞻断言”。