Criar um regex que corresponde quando há caracteres não repetição de um determinado tipo

votos
0

Eu estou tentando criar um regex que corresponde quando não há caracteres de repetição de um determinado tipo e todos os outros caracteres são ignorados. comprimento de palavra, não importa. Ex.

hippos-R-Y-S <--- Matches
hippos-R-Y-Y <--- Does not match
hippos-R-Y-P <--- Matches

Novamente, o hippos-texto poderia ser qualquer coisa, mas as letras maiúsculas que se seguem têm de estar no conjunto de [YRPS]. Obrigado pela ajuda!!

Publicado 03/02/2017 em 16:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Isso deve fazer o trabalho:

^.*?-([YRPS])-(?!\1)([YRPS])-(?!\1)(?!\2)([YRPS])$

Explicação:

^           : begining of string
  .*?-      : 0 or more any char until dash
  ([YRPS])  : one of the set, captured in group 1
  -         : a dash
  (?!\1)    : negative lookahead, not the same letter as in group 1
  ([YRPS])  : one of the set, captured in group 2
  -         : a dash
  (?!\1)    : negative lookahead, not the same letter as in group 1
  (?!\2)    : negative lookahead, not the same letter as in group 2
  ([YRPS])  : one of the set, captured in group 3
$           : end of string
Respondeu 03/02/2017 em 17:09
fonte usuário

votos
1

Você pode usar esse regex baseado em 2 lookaheads negativos para pular correspondência caráter repetido em [YRPS]classe:

^[^-]+-([YRPS])(?:-(?!\1)([YRPS])(?!.*\2))+$

RegEx Demonstração

** Breakup RegEx: *

^           # line start
[^-]+       # match 1 or more of any char that is not a -
-           # match literal -
([YRPS])    # match [YRPS] and group it #1
(?:         # start non-capturing group
   -        # match literal -
   (?!\1)   # negative lookahead to assert next char is not same as group #1
   ([YRPS]) # match [YRPS] and group it #2
   (?!.*\2) # negative lookahead to assert next char is not same as group #2
)+          # end non-capture group and + makes it match 1 or more of the same set
$           # end of line
Respondeu 03/02/2017 em 17:10
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more