[DESISTO] Ajuda com Regex

5 respostas
saoj

a = "“AAAA<h3>BBBB<h3>”

quero pegar AAAA<h3> e não tudo, ou seja, quero pegar até o primeiro <h3> e não até o último!

Como eu faço essa %%^@#$&()@#$&()&*() ?

c:&gt;irb

irb(main):001:0> a = "AAAA<h3>BBBB<h3>"

=> "AAAA<h3>BBBB<h3>"

irb(main):002:0> puts a.scan(/.+&lt;h3&gt;/)

AAAA<h3>BBBB<h3>

=> nil

irb(main):003:0> exit

5 Respostas

T

Bom, acho que você tem de usar o operador não-ganancioso:

irb(main):058:0&gt; a.scan(/.+?&lt;h3&gt;/)
=&gt; ["AAA&lt;h3&gt;", "BBB&lt;h3&gt;"]

EDIT - Vou transferir isto aqui para “Outras Linguagens / Ruby”.

saoj

Valeu, a parada é bizarra.

Deixo um desafio para quem quiser se aventurar, ou provar que de desafio a coisa não tem nada. :slight_smile:

Tenho o seguinte texto:

O cavalo correu em pé
E foi para a casa ROSADA
e comeu muito capim
e depois voltou para a CASA.
E depois de tudo tem a CASA de novo.

Qual o código RUBY que corta tudo entre o primeiro ROSADA e o penúltimo CASA?

O resultado final tem que ser:

O cavalo correu em pé
E foi para a casa
.
E depois de tudo tem a CASA de novo.

D

penúltimo “CASA” ou próximo “CASA” ?? pq se for o próximo facilita… só usar busca com lazy, como o thingol falou… com operador “?” antes da string desejada.

abraços

saoj

danielbadawi:
saoj:

Qual o código RUBY que corta tudo entre o primeiro ROSADA e o penúltimo CASA?

penúltimo “CASA” ou próximo “CASA” ?? pq se for o próximo facilita… só usar busca com lazy, como o thingol falou… com operador “?” antes da string desejada.

abraços

Quero pegar até o penúltimo, e não até o último.

Usando scan de Ruby não funciona… :frowning:

D

esquece o “último”… eu entendi que vc nao quer fazer a busca até o final…

a questão é:
penúltima ou próxima ocorrência?

é que nesse caso que vc mostrou, a próxima ocorrência de CASA também é a penúltima ocorrência…

o que quero saber é se sempre vai querer a penúltima, ou sempre vai querer a próxima ocorrência…

pq se for procurar a próxima ocorrência aí é só usar o operador de lazy.

abraço :wink:

Criado 4 de novembro de 2008
Ultima resposta 5 de nov. de 2008
Respostas 5
Participantes 3