RegEx: диапазон номеров, исключая конкретный номер - PullRequest
0 голосов
/ 07 февраля 2019
  • Использование PHP

Я изо всех сил пытаюсь найти ответ о том, как использовать регулярные выражения для сопоставления с диапазоном чисел, но исключая одно число

, то есть: Iищу ЛЮБОЕ совпадение - AM19 / 0601 - AM19 / 0805 (но НЕ AM19 / 0803)

Я использую это, чтобы увидеть, есть ли у меня совпадение:

AM19 / 6XX AM19/ 7XX AM19 / 8XX

/AM19\/0[678]

Как в:

if (preg_match('/AM19\/0[678]/', $perm) === 0) {
    //do whatever
}

Но как мне «исключить» параметр AM19 / 803, чтобы НЕ возвращать / или быть включенным в матч /поиск

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

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

\bAM19/(?!0803)\d+

Или даже

(?:AM19/0803)(*SKIP)(*FAIL)|AM19/\d+

Последнее может быть немного выше, см. демонстрацию на regex101.com .

0 голосов
/ 07 февраля 2019

Вам не нужен негативный взгляд или что-то в этом роде.Квадратные скобки могут принимать несколько диапазонов (как, например, в [a-zA-Z]).Вы можете просто игнорировать нежелательный номер, используя несколько цифр.

Решение: AM19\/0[6-8][0-9][0-24-9]

Regex101: https://regex101.com/r/6Zc6br/3

0 голосов
/ 07 февраля 2019

Вы можете использовать отрицательное утверждение в своем регулярном выражении:

~\bAM19/0(?!803)[678]\d{2}\b~

Демонстрация RegEx

Здесь у нас есть отрицательное предпросмотр (?!803) после сопоставления 19/0 который не даст совпадения, если 803 появится сразу после 19/0 на входе.

Также обратите внимание, что с помощью альтернативного разделителя регулярных выражений ~ вы можете избежать экранирования / в своем регулярном выражении.

...