# Stringa-\>exp reg

**URL:** <https://www.ruby-forum.com/t/stringa-exp-reg/109536>\
**Category:** IT\
**Created:** [July 16, 2007, 3:34pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536 "2007-07-16T15:34:21Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![fire-fly](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a88e57/32.png) [@fire-fly](https://www.ruby-forum.com/u/fire-fly)\
**Post date:** [July 16, 2007, 3:34pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536/1 "2007-07-16T15:34:21Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fire-fly](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a88e57/32.png) [@fire-fly](https://www.ruby-forum.com/u/fire-fly)\
**Post date:** [July 16, 2007, 3:40pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536/2 "2007-07-16T15:40:22Z")

</div>

Il 16/07/07, Matteo G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

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

string = “hello” # =\> “hello”

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

Ciao  
Matteo

---

<div class="post-metadata">

**Author:** ![fire-fly](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a88e57/32.png) [@fire-fly](https://www.ruby-forum.com/u/fire-fly)\
**Post date:** [July 16, 2007, 3:43pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536/3 "2007-07-16T15:43:22Z")

</div>

On 7/16/07, Matteo G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![fire-fly](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a88e57/32.png) [@fire-fly](https://www.ruby-forum.com/u/fire-fly)\
**Post date:** [July 16, 2007, 7:11pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536/4 "2007-07-16T19:11:44Z")

</div>

On 7/16/07, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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/](http://myurl.com/)! # Equivalente a Regexp.new("  
[http://myurl.com/](http://myurl.com/)")  
=\> =\> /http://myurl.com//

Ciao, 😉  
Antonio

---

<div class="post-metadata">

**Author:** ![fire-fly](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/a88e57/32.png) [@fire-fly](https://www.ruby-forum.com/u/fire-fly)\
**Post date:** [July 16, 2007, 6:41pm UTC](https://www.ruby-forum.com/t/stringa-exp-reg/109536/5 "2007-07-16T18:41:42Z")

</div>

— Antonio C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

```
  ___________________________________________________________

```

Yahoo! Answers - Got a question? Someone out there knows the answer. Try  
it  
now.

> **[Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos](https://www.yahoo.com/)**
>
> Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!
