Criando uma expressão Regex com uma condição "not" para uma substring específica

2

Eu tenho um caso de uso em que estou procurando por uma sub-string em particular em uma string e se essa string em particular contiver outra sub-string em particular, eu quero que ela seja rejeitada.

Ex:

  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

Eu quero que minha expressão Regex capte a string com a palavra "melhor" e não com a palavra "mew", ou seja, a primeira e a terceira string.

Eu tentei combinar ^(.*best).*$ e ^((?!mew).)*$ nas expressões abaixo e o segundo regex one apenas ignora palavras se "mew" estiver presente no início da string.

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

E tentei

^((?!mew).)(.*best).*$
    
por Sri.S 01.07.2018 / 03:12

1 resposta

4
  • Ctrl + F
  • Encontre o que: ^(?=.*best)(?:(?!mew).)*$
  • check Embrulhe
  • verificar expressão regular
  • NÃO VERIFIQUE . matches newline
  • Pesquisa no documento

Explicação:

^           : 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
    
por 01.07.2018 / 12:09

Tags