Jump to content


Photo

Preg_replace_callback + Expressões Regulares


  • Faça o login para participar
2 replies to this topic

#1 fnando

fnando

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 07/07/2004, 14:20

Estou fazendo um sistema de templates e encontrei um problema.

Os padrões para a criação do template seguirão o skema abaixo.

<tpl:pegar_perfil cod="1" color="#FF0000">
	<strong>texto</strong><br>
	textos com e sem formatação HTML
</tpl:pegar_perfil>

O interpretador de template irá pegar o pegar_perfil, que é uma função que deve ser criada e passar como parâmetro os atributos e o conteúdo.

Comecei a criar a regex e cheguei em uma.

<tpl:([a-z0-9_]+) ?([^>]+)>(.*)<\/tpl:\1>

Usando o programa Visual REGEX para ver os matches, encontrei um problema. Se você utiliza apenas 1 nome (pegar_perfil) ele funciona legal.
O problema está quando ele aparece mais de uma vez. Ele sempre bate o padrão <\/tpl:\1> com a última ocorrência. As imagens abaixo ilustram melhor.

A parte pink é relativa ao padrão (.*), enquanto a 2ª parte vermelha é relativa ao padrão <\/tpl:\1>

Posted Image
Ocorrência única

Posted Image
Mais de uma ocorrência

Alguém sabe como me ajudar?!?

Outra coisa, como eu migro essa regex para o PHP? Mais especificamente para a função preg_replace_callback.

Desde já, agradeço.
Fernando Vieira
ANTZ Digital.Media
www.antz.com.br | ez2do weblog

#2 LucasMS

LucasMS

    Super Veterano

  • Usuários
  • 2076 posts
  • Sexo:Não informado

Posted 07/07/2004, 14:26

n sei quase nada de regex, mas to interessado ... onde pega esse programa ai ? deve ser bom

#3 MarviN*

MarviN*

    nw . newton web

  • Usuários
  • 780 posts
  • Sexo:Não informado
  • Localidade:Brasília - DF

Posted 07/07/2004, 15:00

Você já executou isso no PHP? Ou está só testando nesse seu programinha ae!? (que por sinal é bem interessante hein, onde você baixou!? Divulga o link aí pra gente! :))

Dependendo da função que você utilizar no PHP, você vai obter como resultado um array com os casamentos da ereg. Neste caso, 3 valores no array..

Um com os 2, o outro só com o primeiro e o terceiro com o segundo!! Dá uma olhada nas funções que você pode ver o que q rola! ;)
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
[ Blog Desenvolvimento Web: http://www.newtonwagner.net/blog ]
[ Diário da Selva: http://www.diariodaselva.com/ ]

[ "Não existe um caminho para a paz; a paz é o caminho." Mahatma Gandhi ]




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq