Bom pessoal, sou novo no forum… mais gostaria de pedir uma ajuda para vcs…
Gostaria de saber se é possivel construir uma expressão regular recusiva?
Por exemplo, [a-z]color=red[/color], o bloco q esta entre os parentes em negrito tem q ser recursivo…
alguem já viu alguma coisa assim… pesquisei no google e não achei muita coisa… se algum souber como faço e puder postar um em exemplo ficarei muito grato…
Nunca vi recursividade em regex, no máximo backreference ou aqueles asserts loucos q não tem implementação em todo o lugar.
Mas diz ai qual é o objetivo q a gente pode pensar em uma estratégia alternativa
E
entanglement
Não entendi o que você quer fazer, mas de antemão saiba que “expressões regulares não sabem contar parênteses”. Ou seja, elas são insuficientes para verificar se uma expressão aritmética está bem-formada.
R
ricardoguth
Bom estou fazendo um trabalho da faculdade que converte uma expressao digitada em arvore…
ex:
expressao: a[b+c]
arvore: a
/
b c
quando tenho um expressao simples é facil… e quando coloca mais niveis… por exemplo a[b[d+e]+c[f+g]] ou a[b[d[h+i]+e[j+m]]+c[f[n+o]+g[p+q]]], e assim por diante…
precisava validar isso, para ver se a expressao não é invalida, e o professor disse q tem q ser com expressao regular…
Estou usando o Patter e Macther e estava tentando encontrar um expressao que validade isso…
pois é essa a ideia do trabalho…
pesquisando na net encontrei q o PHP faz essas expressao regulares recusivas, basta colocar (expresao)R e pronto…
como será q posso contornar esse problema… na ideia a funcao deveria suportar quantos niveis quizer
E
entanglement
Em Java não é possível escrever uma expressão regular recursiva, e ponto. O que você pode fazer é o seguinte: escrever uma rotina recursiva que capta o “[” e o “]” mais externo (isso é possível fazer via expressões regulares sem problemas ) e joga o que está dentro desse grupo de colchetes.
Vou dar um exemplo com sua entrada, daqui a pouco.
E
entanglement
Hum… é mais difícil que imaginava. O programa abaixo não está correto, mas você pode tentar entender a minha ideia.
Obviamente as expressões regulares não foram escolhidas corretamente.
B
barenko
Não só em java, como em lugar algum…
ricardoguth:
Acho q o q seu professor quis é q vc identificasse e separasse o padrão e usasse função recursiva com cada padrão encontrado com regex…
Fiz uma implementação disso ai agora usando recursividade e alguns macetes…
As dicas que eu te dou são:
[list]Pense simples, se complicar, jogue fora e comece d novo. Habilidade com programação ou linguagem não importam, matemática e bom senso são tudo nessa hora.[/list]
[list]Vc precisa validar e não calcular… então, vc pode substituir um conjunto de padrão por uma representação e ir simplificando a cada iteração.
Por ex: a[b+c[d+e]] ===> a[b+x] ===> x[/list]
[list]Use apenas um padrão generalizado e não vários para cada “situação”[/list]
[list]Uma característica importante tanto do padrão de substituição do item 1 quanto do exemplo do entanglement é que a expressão obrigatoriamente diminui a cada iteração. Isso pode ser utilizado como critério de parada para a recursividade.[/list]
Bom desenvolvimento
PS: posso postar o código q eu fiz, mas acho importante vc tentar ao máximo antes e claro, postar sua solução
P
Paulo_Silveira
e voce pode fazer um WHILE, e so sair do WHILE quando o novo Matcher parar de retornar true no matches()