Ir para conteúdo

POWERED BY:

Arquivado

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

Edson Hostins

Expressão regular

Recommended Posts

Galera...

 

Nessa expressão regular, eu verifico se a string tem link, e transformo ela em uma URL "clicável" html

preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?=&-_/]+!', "<a href=\"\\0\">\\0</a>",$msg);

Porém, links com acento, e links que no lugar de espaço tem o caractere +, ele "corta"

 

Dicas?

 

Acento e + em links não são comuns, mas to tendo situações que possuem....

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

sua situação ocorre aqui:

'[a-zA-Z0-9.?=&-_/]'

apenas amplie-a para casar os caracteres desejados. Você também pode ismplificar algumas coisas

Por exemplo, isso:

'\w'

é igual a isso:

'[A-Za-z0-9_]'

Outro ponto, são os intervalos, pois sua expressão está possuindo um intervalo que eu acredio que não seja intencional:

que é este:

'[&-_]'

O hífen deve sempre ser escapado.

 

As vezes, é mais fácil pensar ao contrário. Ao invés de usar o que deve ter em um link, o que você usa para definir que um link chegou ao fim?

 

Se for espaços em branco, utilize da seguinte forma:

'(http|ftp|scp)(s)?://\S+'

Essa ER procurará tudo que iniciar com algum protocolo, seguido de dois pontos, seguido de barra, seguido de barra (novamente) e seguido de qualquer coisa que não seja um espaço em branco.

 

As barras não necessitam ser escapadas quando não estão dentro de conjuntos.


Simplificando ainda mais, teria esse resultado:

'(htt|ft|sc)ps?://\S+'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mto bom Gabriel....

Mas não deu mto certo... veja só

 

Usando seus dois resultados finais... links com +, ainda não funcionam... ela remove o + da string

 

preg_replace('!(htt|ft|sc)ps?://\S+!', "<a href=\"\\0\" onclick=\"window.open(this); return false;\">\\0</a>",$msg);

 

Exemplo de um link que tem + no meio...

 

http://tecnologia.terra.com.br/noticias/0,,OI603743-EI15608,00-Microsoft+adquire+os+emoticons.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realizei o seguinte teste:

$msg = 'algum texto com um link http://forum.imasters.com.br/topic/534696-+-expressao-+-regular/ continuando o texto';

$retorno = preg_replace('!(htt|ft|sc)ps?://\S+!', "<a href=\"\\0\" onclick=\"window.open(this); return false;\">\\0</a>",$msg);

var_dump($retorno);
Adicionei '+' ao link, e obtive o seguinte resultado:

string 'algum texto com um link <a href="http://forum.imasters.com.br/topic/534696-+-expressao-+-regular/" onclick="window.open(this); return false;">http://forum.imasters.com.br/topic/534696-+-expressao-+-regular/</a> continuando o texto' (length=230)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, era burrada minha, no meu banco não estava gravando o +... ai logicamente deu o problema
Funcionou perfeitamente...

 

Aproveitando o tópico... saberias me dizer se é possível fazer o seguinte com expressão regular

 

 

tenho os caminhos

\\servidor\pasta\cliente\2015\job\

tb tenho

z:\pasta\cliente\2015\job\

 

Estes caminhos, tb virarem link como na situação acima...

 

Valeuu =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Expressões regulares são usadas para encontrar padrões. Você deve separar os padrões que você quer encontrar e substituir.

 

O problema é quando um padrão afeta outro, como seus caminhos de pastas (do primeiro exemplo) serem confundidos com padrões de namespace em um texto. Caso seja o contexto do texto, pode ocorrer.

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.