2

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

Пример:

  1. pikachu_is_the_best_ever_in_the_world_go_pikachu
  2. mew_is_the_best_ever_in_the_world_go_mew
  3. raichu_is_the_best_ever_in_the_world_go_raichu

Я хочу, чтобы мое выражение Regex подбирало строку, содержащую слово "лучший", а не слово "мяу", то есть первую и третью строку.

Я попытался объединить ^(.*best).*$ И ^((?!mew).)*$ в приведенных ниже выражениях, а второе регулярное выражение игнорирует слова, только если в начале строки присутствует "mew".

^(.*best)((?!mew).).*$

И попробовал

^((?!mew).)(.*best).*$

1 ответ1

4
  • Ctrl+F
  • Найти что: ^(?=.*best)(?:(?!mew).)*$
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Поиск в документе

Объяснение:

^           : start of line
(?=         : positive lookahead
  .*        : 0 or more any character but newline
  best      : literally "best"
)           : end lookahead
(?:         : start non capture group
  (?!       : negative lookahead, make sure we don't have 
    mew     : literally "mew"
  )         : end lookahead
  .         : any character but newline
)*          : group may appear 0 or more times
$           : end of line

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .