Как захватить слова, которые отличаются от конкретного слова, используя RegEx?

Я хотел знать, как мне зафиксировать любое слово, которое не совсем "желтый". например: "красный".

Я пробовал следующее регулярное выражение:

(?!(yellow))

Демонстрация отладки

... но у меня есть две проблемы:

  1. Он не захватывает (создает обратную ссылку) для сопоставления выражения (например: "красный").
  2. "yellowwwwww" не соответствует моему регулярному выражению, даже если оно отличается от "yellow".

Можете ли вы помочь мне исправить мое регулярное выражение? Спасибо!


person GoodLife    schedule 19.02.2014    source источник
comment
Какая у тебя струна? Просто слово или несколько, разделенных пробелами?   -  person Robin    schedule 19.02.2014


Ответы (2)


Чтобы захватить любое слово, которое НЕ является yellow, вы можете использовать:

\b((?!\byellow\b)\w+)\b

Онлайн-демонстрация: https://www.debuggex.com/r/S-qTilRd3WJqUP6x

person anubhava    schedule 19.02.2014
comment
Это не будет соответствовать yellowwww, тогда как ОП хочет этого:/ Вероятно, вам следует использовать sthg, например \b((?!yellow\b)\w+)\b - person Robin; 19.02.2014

Как насчет

(?!yellow$)

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

$ гарантирует, что только yellow не будет совпадать. Если вы хотите использовать его внутри фразы, используйте это вместо этого

(?!yellow\b)
person ilomambo    schedule 19.02.2014