Stringa->exp reg

Salve,
è possibile convertire una stringa in espressione regolare?
se si come?
grazie
Ciao

Il 16/07/07, Matteo G. [email protected] ha scritto:

Salve,
è possibile convertire una stringa in espressione regolare?
se si come?

string = “hello” # => “hello”

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

Ciao
Matteo

On 7/16/07, Matteo G. [email protected] 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

On 7/16/07, gabriele renzi [email protected] wrote:

%r{m}
=> /m/

Mentre funziona se usi l’interpolazione

%r{#{m}}
=> /\d+/
/#{m}/

Quello che ho scritto è corretto ma un chiarimento è d’obbligo. :slight_smile:

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, :wink:
Antonio

— Antonio C. [email protected] 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 :slight_smile:


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.