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.
Duvida Com Er
Started By Lailton, 25/02/2010, 19:45
3 replies to this topic
#1
Posted 25/02/2010, 19:45
#2
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:
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]));
- Paulo Freitas likes this
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#3
Posted 25/02/2010, 21:33
Funcionou legal obrigado
poderia explicar sobre essa ER detalhado o que faz cada parte dela ?
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
Posted 25/02/2010, 23:36
Faça uma pequena alteração, troque para:
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.
/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.
- Dudu likes this
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
[...] ó 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)