Регулярное выражение с отрицательным соответствием - PullRequest
4 голосов
/ 25 марта 2010

У меня проблема с регулярным выражением, я пытаюсь игнорировать только число '41', я хочу, чтобы 4, 1, 14 и т. Д. Соответствовали всем.

У меня есть [^\b41\b]это фактически то, что я хочу, но это также игнорирует все одиночные итерации значений 1 и 4.

Например, это соответствует "41", но я хочу, чтобы оно НЕ совпадало: \ b41 \ b

Ответы [ 3 ]

5 голосов
/ 25 марта 2010

Попробуйте что-то вроде:

\b(?!41\b)(\d+)

Конструкция (?!...) является негативным прогнозом , поэтому это означает: найдите границу слова, которая не , за которой следует "41", и запишите последовательность цифр после нее.

1 голос
/ 25 марта 2010

Это похоже на вопрос " Регулярное выражение, которое не содержит определенной строки ", поэтому я повторю свой ответ оттуда:

^((?!41).)*$

Это будет работать для произвольной строки, а не только для 41. См. мой ответ там для объяснения.

1 голос
/ 25 марта 2010

Вы можете использовать отрицательное прогнозное утверждение , чтобы исключить 41:

/\b(?!41\b)\d+\b/

Это регулярное выражение следует интерпретировать как: На любой границе слова \b, если за ней не следует 41\b ((?!41\b)), сопоставьте одну или несколько цифр, за которыми следует граница слова.

Или то же самое с отрицательным проверочным утверждением :

/\b\d+\b(?<!\b41)/

Это регулярное выражение следует интерпретировать как: сопоставить одну или несколько цифр, которые окружены границами слов, но только если подстроке в конце совпадения не предшествует \b41 ((?<!\b41)).

Или даже можете использовать только базовый синтаксис:

/\b(\d|[0-35-9]\d|\d[02-9]|\d{3,})\b/

Это соответствует только последовательности цифр, окруженных границами слов либо:

  • одна цифра
  • две цифры, которые не имеют 4 в первой позиции или 1 во второй позиции
  • три или более цифр
...