Pergunta

Eu quero corresponder a qualquer linha que não termina com 'CA' ou 'CA [qualquer número]'. Como posso fazer isso usando RLIKE no MySQL? (Note que não suporta?! Etc).

Aqui está o regex para um jogo positivo, eu só preciso de uma maneira de negá-lo: '^.*[C][A][0-9]?$'

(Devido a uma limitação de arquitectura constrangedor, eu não quero usar not rlike ...)

Foi útil?

Solução

O truque é transformá-lo em uma descrição do que você não deseja corresponder. Algo não termina em CA ou CA (dígitos) quando:

Ele termina com algo diferente de um ou dígito, ou

Ele termina com algo diferente de A, então um dígito, ou

Ele termina com algo diferente de C, então A, então um dígito, ou

Ele termina com algo diferente de C, então A, ou

Ele é igual a A seguido por um dígito, ou

Ele é igual a A ou um dígito, ou

É vazia.

Assim:

rlike '[^A0-9]$|[^A][0-9]$|[^C]A[0-9]$|[^C]A$|^A[0-9]$|^[A0-9]$|^$'

Não experimentado, un "otimizado", provavelmente, pelo menos um em algum lugar erro na acima.

Outras dicas

Bem, a regex é proveniente de uma coluna em uma tabela, e a maioria dos padrões já funciona. Por isso, seria mais fácil se eu poderia fazer esse padrão trabalho dentro da estrutura existente.

Eu fiz alguma coisa uma vez semelhantes, o que eu fiz foi criar uma outra coluna (eu acho que eu usei um campo de bits) que continha opções para a expressão regular (caso insensibilidade, ancorando, negação, etc). Uma obra abordagem pode semelhante para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top