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

Предположим, у меня есть два списка слов, и я должен сопоставить все слова в первом списке, но ни одного во втором списке. Теперь предположим, что все слова во втором списке (те, которые не должны быть сопоставлены) содержат определенный шаблон: символ1, затем символ2, затем символ2 и символ1 снова. Например, он содержит такие слова, как "abba", "otto", "триллион", "неподходящий" и т. Д.

Я мог бы легко сопоставить этот шаблон с помощью выражения регулярных выражений (\w)(\w)\2\1, И чтобы соответствовать всем словам во втором списке я мог бы использовать \w*(\w)(\w)\2\1\w*, Но как мне сопоставить все слова, кроме тех, которые содержат этот шаблон?

Одна из вещей, которые я попробовал, (?!\w*(\w)(\w)\2\1\w*), но по какой-то причине он также соответствует переходу между первым и вторым символами во втором списке. Я знаю, что делаю что-то не так, но не могу понять, что.

1 ответ

Решение

Zeron получает рабочее решение от Casimir et Hippolyte

\b(?!\w*(\w)(\w)\2\1)\w+ может сделать работу, так как граница слова гарантирует, что вы проверяете слово с самого начала. - Казимир и Ипполит 25 января в 19:10

Другие вопросы по тегам