Ir para conteúdo

POWERED BY:

Arquivado

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

cg-auto

[Resolvido] Expressões Regulares no PHP. Quem as entende?

Recommended Posts

Boa tarde galera.

 

Vejamos a complicadíssima ER abaixo que casa com todas as palavras repetidas com hífem entre elas, como a palavra tico-tico, por exemplo:

([a-z]+)-\1

Aí vem a pergunta... A Função ereg() do PHP não entende os retrovisores "\1 ...... \9"?

 

<?PHP
   //Assim não ta casando
   ereg('([a-z]+)-\1', "tico-tico");
?>

Como posso garantir que a última palavra seja a mesma que a primeira?

 

 

Grande abraço.. Valeu galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na ER. O espelho serve para repetir o primeiro Grupo da pattern

 

Se você quer a mesma coisa no início e Fim, tem que comparar =X

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na ER. O espelho serve para repetir o primeiro Grupo da pattern

 

Se você quer a mesma coisa no início e Fim, tem que comparar =X

Opa, beleza Renato?

Sim, nesse caso simples, seria muito fácil comparar, mas para fazer uma busca num grande texto por palavras repetidas que não necessariamente saberei quais são, porém conheço características dessas palavras?

 

Exemplinho:

 

...
	  <!-- BEGIN listausuarios -->
			//Aqui vai listar todos os usuários
			<!-- BEGIN listasites -->
				  //Aqui vai listar todos os sites do usuário
			<!-- END listasites -->
			..
	  <!-- END listausuarios -->
...

Aqui terei que garantir que se tiver um "<!-- BEGIN listausuarios -->", tmb terá um "<!-- END listausuarios -->"

 

Além do BEGIN e do END, terá outras instruções, do tipo IF, ELSE, ELSEIF, ENDIF, INCLUDE, etc... (mas isso deixa pra depois... :D

 

To ainda me batendo no <!-- BEGIN xxx --> <!-- END xxx --> Pois não sei ainda todas as possibilidades que irão no "xxx".

 

Entende?

 

Então uma ER do tipo:

'<\!-- ([A-Z]+) ([a-z]+) -->(.+)<\!-- ([A-Z]+) /2 -->'

Já me ajudaria muito pelo menos nos testes que to fazendo. (Se funcionasse) hehehe

 

O estranho é que no software "Visual REGEXP 3", essa minha ER casa com a minha String de teste: "Teste de texto aqui <!-- BEGIN listaamigos --><div id="thumbnails">[FRIENDS]</div><!-- END listaamigos --> mais um texto de teste". Na função ereg(), não casa!

 

Visual REGEXP 3 é um software de testes visuais de expressões regulares. (http://laurent.riesterer.free.fr/regexp).

 

Alguém tem alguma solução? :(

 

 

Grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem esses retrovisores sim...veja:

<?php
function ql($a){
	return preg_match('/([a-z])([a-z])(\\1)/i', $a);
}
echo ql('abc'), ' | ', ql('aba');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem esses retrovisores sim...veja:

<?php
function ql($a){
	return preg_match('/([a-z])([a-z])(\\1)/i', $a);
}
echo ql('abc'), ' | ', ql('aba');
?>

Opa, deu certo aqui, porém me surgiu uma outra dúvida. Numa string multilinha (exemplo um arquivo html), tem como fazer a ER casar em todas as linhas como se o arquivo fosse apenas uma linha??

 

 

Grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem esses retrovisores sim...veja:

<?php
function ql($a){
	return preg_match('/([a-z])([a-z])(\\1)/i', $a);
}
echo ql('abc'), ' | ', ql('aba');
?>

Opa, deu certo aqui, porém me surgiu uma outra dúvida. Numa string multilinha (exemplo um arquivo html), tem como fazer a ER casar em todas as linhas como se o arquivo fosse apenas uma linha??

 

 

Grande abraço.

 

Tem sim. Com os modificadores m e/ou s. Apenas não me lembro exatamente qual dos dois se adequaria ao seu caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aki no forum tem um link para um manual completo de ER la do sourceforge...da uma olhadinha la...

beleza Igor e Imaggens?? Cara, eu conheço o manual de ER lá.. Só que tava perguntando pq não estava conseguindo fazer.. Ele diz que para considerar todas as linhas como uma só (na real, é isso que eu quero), é pra usar o modificador de quebra de linha, no meu caso o (s) mas não tava funcionando aqui...

 

Quando eu deixava uma quebra de linha, o ER parava de casar com o texto, quando eu removo (a quebra de linha), ele voltava a casar normalmente. Mas o erro era meu mesmo.. Eu quem tava fazendo errado : / valeu aí galera...

 

Tava achando que essas ERs estavam de implicancia comigo, mas sou eu sou muito burrinho mesmo... hehehe.

 

 

Grande abraço.

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.