• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Revolt

Problema expressão regular

7 mensagens neste tópico

Boas.

Andei aqui a magicar uma expressão regular para a parte da pesquisa num site que estou a desenvolver e deparei-me com um problema. Ao testá-la no RegexBuddy, funciona tudo às mil maravilhas e consigo capturar todas as partes que quero. O problema é que no código PHP, e com a mesma search query, ele não retorna nenhuma match.

Expressão regular:

((?:\s*[^: ]+\s*)*)(??::\s*(\w*))?\s*(?::a:\s*(\d*))?\s*(?::s:\s*(\w*))?)*

Exemplo de query: "Silogismos :D:Filosofia :a:11 :s:Anabela"

Relatório do RegexBuddy:

Match 1: Silogismos :D:Filosofia :a:11 :s:Anabela      

Group 1: Silogismos            

Group 2: Filosofia

Group 3: 11

Group 4: Anabela

Código PHP:

 if ($q == "") {
	$titulo = "";
}
else if (preg_match('/^((?:\s*[^: ]+\s*)*)(??::\s*(\w*))?\s*(?::a:\s*(\d*))?\s*(?::s:\s*(\w*))?)*\s*/', $q, $regs)) {
	var_dump($regs);
	$titulo = trim($regs[1]);
	$disciplina = trim($regs[2]);
	$ano = trim($regs[3]);
	$utilizador = trim($regs[4]);
} else {
	var_dump($q);
	$titulo = "";
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

as barras invertidas em php servem para escapar um caracter. Elas proprias precisam de ser escapadas.

Experimenta colocar duas barras invertidas em todos os sitios da expressão regular onde tens um barra invertida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

as barras invertidas em php servem para escapar um caracter. Elas proprias precisam de ser escapadas.

Experimenta colocar duas barras invertidas em todos os sitios da expressão regular onde tens um barra invertida.

Não é isso, aquelas barras que vês indicam o ínicio e o fim da regex, não são barras

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

as barras invertidas em php servem para escapar um caracter. Elas proprias precisam de ser escapadas.

Experimenta colocar duas barras invertidas em todos os sitios da expressão regular onde tens um barra invertida.

Não é isso, aquelas barras que vês indicam o ínicio e o fim da regex, não são barras

eu estou a falar das barras invertidas que aparecem por toda a regex.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

preg_match('/^((?:\\s*[^: ]+\\s*)*)(??::\\s*(\\w*))?\\s*(?::a:\\s*(\\d*))?\\s*(?::s:\\s*(\\w*))?)*\\s*/', $q, $regs)

tb n resultou :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta:

preg_match('/((?:\s*[^: ]+\s*)*)(??::\s*(\w*))?\s*(?::a:\s*(\d*))?\s*(?::s:\s*(\w*))?)*\s*/', $q, $regs)

(ou seja, sem o ^)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora