preg_match исключить число - PullRequest
2 голосов
/ 26 февраля 2011

У меня есть этот код

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

В последнем шаблоне я должен проверить трехзначное число, которое может быть составлено из любой цифры, но не должно создавать число, подобное 404 или 401как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 26 февраля 2011

Вы можете использовать отрицательное утверждение, чтобы убедиться, что у совпадающей строки нет 404 или 401 как:

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

Rubular Link

1 голос
/ 26 февраля 2011

Чем больше значений вы хотите исключить, тем сложнее это будет, но

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

будет соответствовать любому трехзначному числу, которое не начинается с 4,

или любое трехзначное число, которое начинается с 4, но не начинается с 40,

или любое трехзначное число, начинающееся с 40, но не 401 или 404.

1 голос
/ 26 февраля 2011

объяснение:

A отрицательный прогноз ?! ищет текст, который не соответствует указанному шаблону .Положительный взгляд ищет шаблон, который соответствует, но не возвращается.

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

  • ?! doне соответствует следующему шаблону
  • 404|401 или 404 или 401, поэтому | используется для альтернатив
...