Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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.
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.
Olá, se for no usar no MySQL, use
SELECT field FROM table WHERE field NOT REGEXP '[[:<:]]cur_10[2-9][[:>:]]';
Até ;)
Perfeito Carlos, simplesmente perfeito.
Realmente não sabia que se podia negar uma expressão desta forma.
Muito obrigado. Está resolvido.
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)
Isso podia ser facilmente resolvido sem uso de expressões regulares. Veja bem:
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