Ir para conteúdo

POWERED BY:

Arquivado

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

falcao544

[Resolvido] Espressões Regulares!

Recommended Posts

Olá pessoal acabei de aprender o básico de RegEx, mas o problema é que aprendi o POSIX, mas vi no php.net que o POSIX na versão do PHP que eu estou usando não é aceita, tenho que usar PCRE! Aí surgiram algumas dúvidas!

São elas:

 

-Toda vez que eu for escrever o padrão eu tenho que colocar no início um /, ~ ou # e no fim também?

 

-Quando eu coloco ^(.+)\.a$ significa que a string tem que terminar em "a" certo? mas se eu colocar ^(.+)\.(a)$ significa que logo depois do ponto tem que vir um "a", mas não significa que a string tenha que terminar em a certo?

 

-É obrigatório colocar um modificador? Se eu colocar i é a mesma coisa que eregi, pois vira case-insensitive?

 

 

Valeu pessoal!

 

Pessoal aproveitando o o tópico, estou com problemas em uma RegEx!

 

Olhem por favor:

 

<?php if(!preg_match('/^(http://)$/i', $endereco)){ ?>

Está acusando esse erro:

 

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in /home/linkisit/public_html/redireciona.php on line 15

 

Valeu!

 

EDIT:

 

Problema resolvido! Foi so adicionar \ antes do // do http! mas o problema agora é que ele sempre fala que nao achou o http! mesmo eu digitando!

 

olhem:

 

<?php
if(!preg_match('/^(http:\/\/)$/i', $endereco)){
  echo"Nao achei o http!";
 }
 else{
    echo"achei o http!";
 }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não estou enganado, é por causa do cifrão, que representa o final da sentença.

 

Essa ER vai casar apenas com auilo que começar e terminar com http://.

 

Para confirmar, experiemente colocar um (.*?) depois das barras escapadas.

 

Mas... Por que usar uma ER para fazer esse tipo de verificação se com strpos() é muito mais rápido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

-Toda vez que eu for escrever o padrão eu tenho que colocar no início um /, ~ ou # e no fim também?

Sim, a expressão deve ser delimitada por algum desses caracteres.

 

-Quando eu coloco ^(.+)\.a$ significa que a string tem que terminar em "a" certo?

Ela tem que terminar com a string literal '.a', e como utilizou o '+' (tem-que-ter), a sua string só irá casar se tiver algo antes do '.a'. Por exemplo,

 

<?php
$pattern = '/^(.+)\.a$/';
$subject = '.a';

var_dump( (bool) preg_match( $pattern, $subject ) );

 

irá retornar false.

 

mas se eu colocar ^(.+)\.(a)$ significa que logo depois do ponto tem que vir um "a", mas não significa que a string tenha que terminar em a certo?

Não mudou em nada em relação ao padrão anterior.

 

-É obrigatório colocar um modificador?

Não.

 

Se eu colocar i é a mesma coisa que eregi, pois vira case-insensitive?

Sim.

 

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in /home/linkisit/public_html/redireciona.php on line 15

Você deve escapar qualquer caractere que não esteja para ser representado pelo seu valor literal. A barra é um exemplo, por isso você deve escapar com uma barra invertida.

 

if(!preg_match('/^(http:\/\/)$/i', $endereco)){

 

EDIT

 

Putz, você editou seu post umas 3 vezes enquanto eu postava hehe.

 

mas o problema agora é que ele sempre fala que nao achou o http! mesmo eu digitando!

É exatamente o que Bruno disse no post dele, sobre o cifrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pessoal pelas respostas! E Bruno teria problema se eu apenas retirasse o $?

 

E eu editei 3 vezes mesmo Andre (:

 

EDIT:

 

Bruno retirei e funcionou mas isso é meio que gambiarra? Pode trazer problemas futuros?

 

Valeu!

 

Esse meu Espressões doe XD se der pra mudar aí eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vai trazer problema porque TUDO aquilo que passar por essa ER e começar com http://, sem o cifrão já vai casar.

 

Não importa o que haja na frente e aí sim pode trazer problema, pois se você só verificar o HTTP Scheme, sem validar a URL por inteiro, permitirá que QUALQUER coisa que passe pelo começo dela seja aceita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu bruno! E que como ainda estou desenvolvendo isso não me preocupei em validar as URL's! Vou fazer a validação de um modo diferente, vou usar Ajax para puxar uma RegEx desse ou de outro arquivo para validar a URL e vou usar cURL para ver se o site tá funcionando!

 

Mais uma vez valeu!

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.