Não é possível gerar regex para a string

Oct 13 2020

Eu tenho uma string abc-[|123|243|]-xyz-[|432|567|]e quero gerar uma regex que corresponda à string específica.

A regex deve ser testada em relação aos exemplos a seguir e com o resultado específico.

Exp 1: abc-[|123|234|]-xyz-[|432|567|]( 123está presente em [|123|243|])

Resultado: Match

Exp 2: xyz-[|123|243|]-abc-[|432|567|](ordem de abce xyztrocado)

Resultado: Sem correspondência

Exp 3: abc-[|243|563|]-xyz-[|432|567|]( 243e 432estão presentes)

Resultado: Match

Exp 4: xyz-[|143|434|]-abc-[|432|999|]( [|148|434|]não corresponde a nenhum número em [|123|243|])

Resultado: Sem correspondência

Tentei criar uma regex, mas só funciona no caso exato e não funciona em outros casos.

abc-\[\|123\||243\|\]-xyz-\[\|432\||567\|\]

Respostas

1 WiktorStribiżew Oct 13 2020 at 10:05

Você pode usar

^abc-\[\|(?:123|243)\|\d+\|\]-xyz-\[\|432\|\d+\|\]$

Veja a demonstração do regex .

Detalhes

  • ^ - início da string
  • abc-\[\| - abc-[|
  • (?:123|243)- ou 123ou243
  • \| - uma |
  • \d+ - 1+ dígitos
  • \|\]-xyz-\[\|432\|- um |]-xyz-[|432|texto
  • \d+ - 1+ dígitos
  • \|\]- um |]texto
  • $ - fim da corda