Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
fala ae pessoal..
imagine a seguinte string:
$var = "OBS: Observação1 (alguma coisa nos parenteses) ESPECIFICAÇÃO: Observação2 1+2=3 OBS: Observação3 {alguma coisa}"
Bom, gostaria de recuperar todas as observações "OBS:" dessa string OU as "ESPECIFICAÇÃO". Gostaria de obter no seguinte formato:
OBS: Observação1 (alguma coisa nos parenteses)
ESPECIFICAÇÃO: Observação2 1+2=3
OBS: Observação3 {alguma coisa}
eu tentei "/(P<chave>OBS:|ESPECIFICAÇÃO:)P<valor>(.*?)/i" mais nada é retornado, pq nada é retornado?? e como fazer isso usando matches??
Obrigado ae
[]s
certo.. eh uma ideia..mais gostaira d saber ser por REG dava pra faze saca!...
reg = ?
Se da pra resolver com expressão regular... = REG!!... rsrs
Tipo assim... eu imaginei que tivesse algum caractere q fizesse a expressão voltar para o inicio e ir capturando...
tipo... "/(P<chave>OBS:|ESPECIFICAÇÃO:)P<valor>**(.*?)**/i"
Vejam o ".?" para mim quando acabasse com isso ele voltava para o inicio continuando os casamentos até que não tivesse mais nenhum... bom, ja vi que não é com o ".?" que faz isso, porem, existe algum que faça isso?????
Vlww
p-reg-replace
PEARL - REGULAR - REPLACE
substituição do PEARL em modo ER
$novastring = preg_replace('/((OBS:)|(ESPECIFICAÇÃO:))/i',';;',$string);
Converte OBS: e ESPECIFICAÇÃO: em ;;
nossa $novastring ficaria assim:
;; Observação1 (alguma coisa nos parenteses)
;; Observação2 1+2=3
;; Observação3 {alguma coisa}
então com a função explode() (que aliás, eu montei errado), quebramos a string em partes de um array(), ficando assim:
array(''," Observação1 (alguma coisa nos parenteses)\n"," Observação2 1+2=3\n"," Observação3 {alguma coisa}\n");
com a função list(), jogamos as parcelas da array dentro de variáveis conhecidas
list(null,$obs1,$obs2,$obs3) = explode(...);
. pras ER significa qualquer coisa. Podem ser alfanuméricos [a-z0-9A-Z], acentos traços, pontos, caracteres especiais e de formatação (quebras de linha, tabulação, etc)
* significa 0 ou N. Após um caractere ou grupo, significa que aquela entidade pode aparecer nenhuma ou inifitas vezes
? significa 0 ou 1. Funciona análogo ao *, mas vai de nenhuma a uma vez.
+ significa 1 ou N. A entidade DEVE aparecer NO MÍNIMO uma vez.
() Encapsulador de grupo. Significa que o conteúdo dentro dos parênteses deve ser lido como uma "mini expressão regular"
[] Encapsulador de lista. Significa que o conteúdo dentro dos colchetes deve ser lido um a um com um operador OU
Exemplo:
[aeiou] procura por a, ou e, ou i, ou o, ou u e sai da lista assim que o primeiro valor seja encontrado
{} Encapsulador de range. Quando os caracteres coringa *, ? e + não conseguem atender às suas necessidades, entra em cena o encapsulador de range. Com os termos separados por vírgula, indica que a entidade anterior deve aparecer de X a Y vezes. Se Y não for especificado, este valor será infinito.
Exemplo:
a{3,9} Indica que a letra a DEVE aparecer NO MÍNIMO 3 vezes, mas também será envolvida até 9 ocorrências
| operador ou. Procura pela entidade imediatamente anterior OU a entidade imediatamente ajacente
\ caractere de escape. Preceda qualquer um dos caracteres listados acima quando precisar que eles sejam parte da expressão regular, e não modificadores da mesma. também serve para definir caracteres especiais como \s espaço, \t tabulação \n quebra de linha
cara..não posso usar essa ideia pq eu posso ter ";" por exemplo no meio do texto... na verdade eu tenho soluções para esse problema, mais estou aprendendo Expressão regular por isso queria resovler com expressão regular APENAS... por isso queria sb se existe algum caracter que volta para o inicio da expressão para fazer o casamento até que não haja mais o que casar saca!??
mais vlw ae
por isso que coloquei ponto-e-vírgula duplos, pode trocar por |, ||, -, o que quiser
verificação recursiva
$er = '//';
while(preg_match($er,$string)) preg_replace($er,'',$string);
// converte em um padrão extraível
$novastring = preg_replace('/((OBS:)|(ESPECIFICAÇÃO:))/i',';;',$string);
// extrai
list($obs1,$especific,$obs2) = explode(';;',$novastring);