preg_match排除一个数字

时间:2011-02-25 21:14:24

标签: php regex numbers preg-match regex-negation

我有这段代码

preg_match("/\bHTTP(.)+ (\d{3})/", $string)

在最后一个模式中,我必须检查一个3位数字,该数字可由任何数字组成,但不应创建像404401这样的数字,我该怎么办?

3 个答案:

答案 0 :(得分:5)

您可以使用否定先行断言来确保匹配的字符串没有404401

preg_match("/\bHTTP(.+) (?!404|401)(\d{3})/", $string)

Rubular Link

答案 1 :(得分:1)

说明:

否定前瞻 ?!查找与指定模式不匹配的文字。 积极的前瞻寻找匹配但不返回的模式。

http://www.regular-expressions.info/lookaround.html

  • ?!与以下内容不符 图案
  • 404|401 404401,因此|用于替代

答案 2 :(得分:1)

您要排除的值越多,这将获得的复杂程度越高,但

preg_match("/\bHTTP(.+) ([0-35-9]\d{2}|4[1-9]\d|40[0235-9])/", $string)

将匹配任何不以4开头的三位数字

任何以4开头但不以40开头的三位数字,

以40开头但不是401或404的任何三位数字。