Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kimura

[Resolvido] Expressão regular negando alguns valores

Recommended Posts

Olá,

 

Perdoem se eu estiver postando no lugar errado, mas acho que a minha dúvida se encaixa em vários assuntos.

 

Tenho a seguinte expressão regular:

cur_([0-9]+)

Dentro desta regra quero ignorar os valores que estão entre 102 a 109. Como posso proceder?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso podia ser facilmente resolvido sem uso de expressões regulares. Veja bem:

 

$string = 'cur_105';
$string = explode ('_', $string);
if ($string[0] == 'cur') {
$cod = (int)$string[1];
if ( !($cod > 101 && $cod < 110) ) {//se $cod NÃO for MAIOR que 101 E MENOR que 110...
	//faz o que tem que fazer...
}
}

 

Dá ainda para fazer com operadores bit-a-bit, ou insistir nas expressões regulares.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso podia ser facilmente resolvido sem uso de expressões regulares. Veja bem:

 

$string = 'cur_105';
$string = explode ('_', $string);
if ($string[0] == 'cur') {
$cod = (int)$string[1];
if ( !($cod > 101 && $cod < 110) ) {//se $cod NÃO for MAIOR que 101 E MENOR que 110...
	//faz o que tem que fazer...
}
}

 

Dá ainda para fazer com operadores bit-a-bit, ou insistir nas expressões regulares.

 

[]'s

Com certeza daria Matheus, porém coloquei no formato de expressão, pois é assim e só assim que preciso.

 

Coloquei esta dúvida aqui no fórum php, pois acho que o pessoal daqui mais lógico e certamente conseguirei sanar esta minha necessidade.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Consegui realizar uma solução:

 

cur_(?!10[2-9])[0-9]+

Está funcionando perfeitamente na programação, porém não sei se há regras especiais para o MySQL, que ainda não está funcionando.

 

Por favor, se puderem mover para o fórum de banco agradeceria.

 

Obrigado.

 

Resumo:

Está selecionando qualquer valor, exceto valores entre 102-109.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, se for no usar no MySQL, use

SELECT `field` FROM `table` WHERE `field` NOT REGEXP '[[:<:]]cur_10[2-9][[:>:]]';

 

 

Até ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito Carlos, simplesmente perfeito.

 

Realmente não sabia que se podia negar uma expressão desta forma.

 

Muito obrigado. Está resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, qual o resultado esperado ? dependendo você pode usar um NOT IN ..

ou operadores normais mesmo ..

mysql> select * from teste;
+--------+
| numero |
+--------+
|      1 |
|      2 |
|      3 |
|      4 |
|      5 |
|      6 |
|      7 |
|      8 |
|      9 |
|     10 |
+--------+
5 rows in set (0.00 sec)

mysql> select * from teste where numero < 7 and numero > 1;
+--------+
| numero |
+--------+
|      2 |
|      3 |
|      4 |
|      5 |
|      6 |
+--------+
5 rows in set (0.00 sec)

mysql> select * from teste where numero < 1 or numero > 7;
+--------+
| numero |
+--------+
|      8 |
|      9 |
|     10 |
+--------+
3 rows in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.