Jump to content


Photo

Duvida Com Er


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

#1 Lailton

Lailton

    Novato no fórum

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

Posted 25/02/2010, 19:45

Ola,

gostara de uma ajuda com a expressao regular para tratar a string abaixo:

"public ca:=1,q,e,q:=0"

ela pode variar para:

public ca:="teste"

public vA,vB

minha duvida é pegar os valores separado por virgula sendo ilimitado.

public oWnd, oDlg, a1, a2, a5, a7, a3, t1, hwnd


Vlw Obrigado.

#2 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 25/02/2010, 21:04

O que você tem que fazer é pegar o conjunto de valores, e daí sim fazer um split pela vírgula.

Exemplo:

preg_match("/public\s+(\w+(?:\s*:=\s*)?[^,]+(?:,\s*\w+(?:\s*:=\s*[^,]+)?)*)/", "public ca:=1,q,e,q:=0", $m);
print_r(preg_split("/\s*,\s*/", $m[1]));

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#3 Lailton

Lailton

    Novato no fórum

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

Posted 25/02/2010, 21:33

Funcionou legal obrigado

poderia explicar sobre essa ER detalhado o que faz cada parte dela ?

obrigado

Edição feita por: Lailton, 25/02/2010, 21:36.


#4 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 25/02/2010, 23:36

Faça uma pequena alteração, troque para:
/public\s+(\w+(?:\s*:=\s*[^,]+)?(?:\s*,\s*\w+(?:\s*:=\s*[^,]+)?)*)/

Segue a explicação:
public\s+ => a palavra "public" seguida de 1 ou mais espaços
\w+(?:\s*:=\s*[^,]+)? => letra/número/underline (que é representado por \w) seguido opcionalmente de ':=', aceitando opcionalmente espaços entre ele, o [^,]+ serve para indicar que aceita qualquer coisa diferente de ',' (a intenção foi apenas casar um possível valor, mas isto irá dar problema se o valor tiver vírgula (num texto, ou chamada de funcao, por exemplo)... Se tiver problema para você, basta dizer que a gente pode usar algo menos abrangente.
(?:,\s*\w+(?:\s*:=\ s*[^,]+)?)*) => repetição da regra descrita acima quantas vezes for possível, isto é, para repetir a mesma regra para a especificação do nome da variável ou atribuição na lista.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




0 user(s) are reading this topic

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

IPB Skin By Virteq