ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Регулярное выражение Java: совпадение без определенных символов

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для поиска строки "target", которая не имеет перед собой строки "notThis", используется конструкция отрицательного отката (negative lookbehind): "(?<!notThis)target".

Java
Скопировать код
String regex = "(?<!notThis)target";  // Указываем: не учитывать "target", если перед ним стоит "notThis".

Реализация данного алгоритма на Java следующая:

Java
Скопировать код
String sample = "I want this target but notThis target"; // Вносим "target" разумно.
Pattern pattern = Pattern.compile("(?<!notThis)target"); // Игнорируем "notThis"!
Matcher matcher = pattern.matcher(sample);

while (matcher.find()) {
    System.out.println(matcher.group());  // Выводим "target", при условии отсутствия "notThis" рядом.
}

Учтите, что в Java ретроспективные проверки разрешены только с фиксированной или максимальной длиной.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Детальный разбор ретроспективных проверок

Сложные строки

В сложных случаях можно воспользоваться альтернацией внутри отрицательного отката. Это расширит ваше знание регулярных выражений и поможет стать сущим мастером откатов.

Проверка выражений

Работа с регулярными выражениями с использованием ресурсов типа regex101.com значительно упрощает задачу и экономит время, предоставляя обратную связь в режиме реального времени.

Гибкость в ограничениях

В Java существуют ограничения для ретроспективных проверок. Но если шаблон имеет переменную длину, вы всегда можете облегчить себе задачу или отфильтровать результаты с помощью кода.

Взаимодействие с кодом

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

Визуализация: Следите за хитрой кошечкой 🐈

Представьте, что Хитрая кошечка 🐈 решается пройти через дверь 🚪 только тогда, когда рядом нет собаки 🐶.

С применением отрицательной ретроспективной проверки:

Markdown
Скопировать код
🐈🚪 – Успешно! ✅ (Совпадение обнаружено!)
🐶🐈🚪 – Кошечка отходит назад, попытка прервана. (Предшествующий элемент 🐶 мешает)

Что происходит за кулисами:

Отрицательная ретроспективная проверка в регулярных выражениях обнаруживает совпадение, если перед ним не находится определённый паттерн.

Рекомендации и трюки по работе с откатами

Короткие откаты

Java требует точную длину откатов, поэтому следует обращать на это особое внимание.

Сочетание условий

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

Баланс и оптимизация

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

Полезные материалы

  1. Руководство по регулярным выражениям – Оглядывающиеся и отступающие операторы (Lookahead и Lookbehind)
  2. Pattern (Java Platform SE 8)
  3. Урок: Регулярные выражения (The Java Tutorials > Essential Java Classes)
  4. Продвинутое руководство по регулярным выражениям — Синтаксис (RexEgg)
  5. Look-behind в Java без очевидной максимальной длины – Stack Overflow
  6. Регулярные выражения: Особые конструкции