Сделайте регулярное выражение ленивым образом, пропуская некоторые слова - PullRequest
2 голосов
/ 22 апреля 2019

Я хочу регулярное выражение, которое включает в себя пропуск ленивых слов.Например: регулярное выражение:

all(\s+\S+){0,10}\s+(Damages|amount)(?!(\s+\S+){0,10}\s+in\s*excess\s*of)

Образец текста:

все такие убытки в соответствии с разделом 8.1 (а) сверх суммы, подлежащей вычету

Моя цель состоит в том, чтобы я не хотел совпадать, если после слов все убытки или вся сумма следуют "сверх" и совпадают в противном случае.Что происходит, так это то, что эта часть регулярного выражения all(\s*\S*){0,10}\s+(Damages|amount) соответствует от первого слова "все" до последнего количества вхождения слова, которое пропускает часть "в доступе" , чтобы соответствовать отрицательному взгляду вперед, и совпадение прошло успешно.Я хочу, чтобы эта часть регулярного выражения прекратила сопоставление в дальнейшем после того, как появилось первое вхождение слова ущерб | сумма , чтобы оно могло найти "в доступе" впоследствии.

1 Ответ

1 голос
/ 23 апреля 2019

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

all(?!(?:\s+\S+){0,7}\s+in\s+excess\s+of)(\s+\S+){0,10}\s+(Damages|amount)

Предварительный просмотр после all убедится, что нет совпадения, если в десяти (* 10 - 3 - 7, следовательно, {0,7}) словах после all.

есть in excess of.

Подробнее

  • all - буквальная подстрока
  • (?!(?:\s+\S+){0,7}\s+in\s+excess\s+of) - отрицательный прогноз, который не соответствует совпадению, если имеется от 0 до 7 повторений 1 или более пробелов, за которыми следуют 1 или более непробельных символов, за которыми следует in excess of substring
  • (\s+\S+){0,10} - от 0 до 10 повторений 1 или более пробелов, за которыми следуют 1 или более непробельных символов
  • \s+ - 1 или более пробелов
  • (Damages|amount) - Damages или amount подстрока.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...