Регулярное выражение для захвата текста, начинающегося с «NE», за которым следуют любая одна или две цифры, кроме 61 до 71 - PullRequest
0 голосов
/ 27 февраля 2020

Я ищу через почтовые индексы Великобритании.

Я хочу захватить весь текст, начинающийся с NE, за которым следуют любые цифры, кроме чисел от 61 до 71, используя regular expressions в PHP.

Пример допустимых совпадений:

NE1, NE17, NE49

Недопустимые совпадения:

NE61, NE70

Я пробовал, например,

NE((?!(6[1-9]))|(?!(7[0-1])))

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Вы можете использовать

\bNE(?!(?:6[1-9]|7[01])\b)\d{1,2}\b

См. Демоверсию regex

Подробности

  • \b - начало слова (здесь)
  • NE - NE подстрока
  • (?!(?:6[1-9]|7[01])\b) - нет 6 и затем 1 - 9 или 70 или 71, за которым следует граница слова, разрешенная непосредственно справа от текущего местоположения
  • \d{1,2} - одна или две цифры
  • \b - конечная граница слова (здесь).

PHP демо :

$s = "Example of valid matches: NE1, NE17, NE49 Invalid matches: NE61, NE70";
if (preg_match_all('~\bNE(?!(?:6[1-9]|7[01])\b)\d{1,2}\b~', $s, $matches)) {
    print_r($matches[0]);
}
// => Array ( [0] => NE1  [1] => NE17  [2] => NE49 )
1 голос
/ 27 февраля 2020

Этого должно быть достаточно NE(?!(6[1-9]|7[01]))\d+. (Отредактировано на основе наблюдения @Wiktor Stribiżew)

https://regex101.com/r/T8Cy4C/9

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