ATENÇÃO: ONDE VOCÊ ESTIVER VENDO UM BARRA INVERTIDA COLOQUE DUAS
não se esqueça de que replaceAll retorna uma nova String e não modifica a original
PS.: Lá em Valhalla também passam aqueles perueiros que para e gritam no seu ouvido no ponto de ônibus: - MONTE OLIMPO!!!, CÉU!!!, INFEEEERNOO!!! ?
Bruno_Cardoso
Funcionou às mil maravilhas… era esta parte que eu estava a precisar:
((.|\s)*?)
Já agora se não custar muito pode-me explicar o q isto significa? para eu entender melhor…
Só há mais um problema… é q ele coloca tudo seguido na mesma linha… sabe como posso dar a voltar a isto? Talvez substituindo o caracter de final de linha por um ? como represento o caracter de final de linha nas expressoes regulares, sabe?
Obrigado pela ajuda!
louds
Esse trecho ta cheio de redundancias e tem 1 erro.
O escape ‘s’ não existe, vc que queria dizer ‘\s’? Em vez de usar ‘.|\s’ é melhor passar a flag DOTALL pro Pattern.
usar ‘()?’ é redundante, '’ implica em 0 ou mais ocorrencias, ‘?’ implica em 0 ou 1 ocorrencias. A propria documentação da Sun classifica *? como redundante.
marciolx
1 - o s está com a barra no post original, é no quote que saiu sem barras
2 - vc tem razão, o *? é redundante
3 - vc tem razão também quanto ao DOTALL
4 - não sou nenhum mago das strings
5 - Não gritem PINHEIROS, LAAAAPA, VILA MADALEEEENAAA no meu ouvido que eu não sou surdo :?
Bruno_Cardoso
uma pergunta final… como é que eu colocava caso eu quisesse fazer a mesma coisa q fiz em cima mas em que a parte do meio entre as tags NÃO PUDESSE conter a string [/zode] por exemplo… alguem sabe?
Obrigado
marciolx
em primeiro lugar troque o redundante *? por * ambos querem dizer a mesma coisa que é “onde a expressão aparece 0 ou mais vezes”
os dois parênteses (( )) significam que a expressão tem dois grupos de captura que é o que é retornado por $n (onde n=1…n)
o | é uma condicional OR
o . significa qualquer caracter e o s significa qualquer espaço em branco incluindo tabulação ou terminador de linha.
Juntando tudo:
pegue qualquer caractere OU terminador de linha que ocorram 0 ou mais vezes entre as palavras e
Bruno_Cardoso
"marciolx":
em primeiro lugar troque o redundante *? por * ambos querem dizer a mesma coisa que é "onde a expressão aparece 0 ou mais vezes"
Ja fiz isso :)
"marciolx":
Juntando tudo:
pegue qualquer caractere OU terminador de linha que ocorram 0 ou mais vezes entre as palavras [zode] e [/zode]
Poix... o problema é q se eu tiver por exemplo:
[zode]sdfsdfsdf[/zode][zode]sdgsg[/zode]
Ele pega no 1º [zode] e no ultimo [/zode] e faz apenas uma transformacao em vez de reconhecer as duas...
marciolx
"Morcego":
Poix... o problema é q se eu tiver por exemplo:
[zode]sdfsdfsdf[/zode][zode]sdgsg[/zode]
Ele pega no 1º [zode] e no ultimo [/zode] e faz apenas uma transformacao em vez de reconhecer as duas...
bom, daí é só você dizer para a expressão regular que você não quer o caminho mais longo entre os dois pontos (greedy regex) e sim todos os caminhos (non-greedy regex), ou seja, é só voltar a acrescentar o "redundante" *? e problema resolvido
Bruno_Cardoso
muhahhahhahaha funcionou!! bem… não sei se vc é o mago das strings mas se não é anda lá perto! Obrigadão!
marciolx
ok para mais informações veja a documentação da API java.util.regex, tem muita coisa lá ou procure por “regular expressions” no google, é um assunto bem interessante. No meu caso eu sempre acrescento um “-perl” na busca, porque se eu quisesse ler hieróglifos seria arqueólogo.