Forum: Italian Ruby user group stringa->exp reg

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D39a3778f89a375b7fc9c33f10bf77e6?d=identicon&s=25 Matteo Giacomoni (Guest)
on 2007-07-16 15:34
(Received via mailing list)
Salve,
è possibile convertire una stringa in espressione regolare?
se si come?
grazie
Ciao
18bd7c6669193d3dd0030d77854b6248?d=identicon&s=25 Matteo Collina (Guest)
on 2007-07-16 15:40
(Received via mailing list)
Il 16/07/07, Matteo Giacomoni <giaco81@gmail.com> ha scritto:
>
> Salve,
> è possibile convertire una stringa in espressione regolare?
> se si come?


string = "hello" # => "hello"

regexp = Regexp.new(string) # => /hello/

Ciao
Matteo
6111b4012d1401ca83fdcea6b1d71237?d=identicon&s=25 Antonio Cangiano (Guest)
on 2007-07-16 15:43
(Received via mailing list)
On 7/16/07, Matteo Giacomoni <giaco81@gmail.com> wrote:
>
> Salve,
> è possibile convertire una stringa in espressione regolare?
> se si come?


Ciao Matteo,

puoi usare Regexp.new("mystring") oppure %r{mystring}.

Esempio:

irb(main):001:0> my_pattern = Regexp.new("foo")
=> /foo/
irb(main):002:0> "bar foo" =~ my_pattern
=> 4

Ciao,
Antonio
C01072ccffb1f2d23f8b5f686e5b106a?d=identicon&s=25 gabriele renzi (Guest)
on 2007-07-16 18:41
(Received via mailing list)
--- Antonio Cangiano <acangiano@gmail.com> wrote:

>
> puoi usare Regexp.new("mystring") oppure
> %r{mystring}.

credo che antonio si sia asbagliato qui:

la seconda così non funziona:
 >> m='\d+'
 => "\\d+"
 >> %r{m}
 => /m/

Mentre funziona se usi l'interpolazione
 >> %r{#{m}}
 => /\d+/
 >> /#{m}/

Anche con il literal classico
 => /\d+/
 >> /#{m}/

Tieni a mente anche Regexp.quote, che fa in modo di
interpretare i metacaratteri letteralmente
 >> r = Regexp.new(Regexp.quote('.'))
 => /\./
 >> r.match 'a'
 => nil
 >> r.match '.'
 => #<MatchData:0xb786e0e0>

Non è detto che ti serva, ma è giusto che tu sappia
che esiste :)



--
Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info


      ___________________________________________________________
Yahoo! Answers - Got a question? Someone out there knows the answer. Try
it
now.
http://uk.answers.yahoo.com/
6111b4012d1401ca83fdcea6b1d71237?d=identicon&s=25 Antonio Cangiano (Guest)
on 2007-07-16 19:11
(Received via mailing list)
On 7/16/07, gabriele renzi <surrender_it@yahoo.it> wrote:
> >> %r{m}
> => /m/
>
> Mentre funziona se usi l'interpolazione
> >> %r{#{m}}
> => /\d+/
> >> /#{m}/


Quello che ho scritto è corretto ma un chiarimento è d'obbligo. :)

Quando indico %r{mystring}, mystring non è una variable ma è la stringa
stessa (equivalente a Regexp.new("mystring")). Per questo quando scrivi
%r{m} ottieni /m/ anche se m esiste come variabile. Puoi usare
direttamente
%r{\d+} e funzionerebbe, oppure se vuoi assegnare il tuo pattern ad una
variabile, hai bisogno di convertirla a stringa prima di usarla in %r{}.
Per
questo nel tuo esempio %r{#{m}} funziona perché è equivalente a %r{\d+}.

Visto che ci siamo, citiamo anche il fatto che %r può essere usato per
definire regexp con delimitatori che non siano due '/'. Ad esempio

irb(main):001:0> %r!http://myurl.com/! # Equivalente a Regexp.new("
http://myurl.com/")
=> => /http:\/\/myurl.com\//

Ciao, ;-)
Antonio
This topic is locked and can not be replied to.