# Regex issue

**URL:** <https://www.ruby-forum.com/t/regex-issue/127150>\
**Category:** Ruby\
**Created:** [January 25, 2008, 2:35pm UTC](https://www.ruby-forum.com/t/regex-issue/127150 "2008-01-25T14:35:37Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [January 25, 2008, 2:35pm UTC](https://www.ruby-forum.com/t/regex-issue/127150/1 "2008-01-25T14:35:37Z")

</div>

my pattern should match either import or delete  
However it does not seem to be working.

irb(main):014:0\> pattern="([import]|[delete])"  
=\> “([import]|[delete])”  
irb(main):015:0\> pattern.match(“import”)  
=\> #MatchData:0x2e76f9c  
irb(main):016:0\> $1  
=\> nil

---

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [January 25, 2008, 2:44pm UTC](https://www.ruby-forum.com/t/regex-issue/127150/2 "2008-01-25T14:44:26Z")

</div>

Alle Friday 25 January 2008, Junkone ha scritto:

> my pattern should match either import or delete  
> However it does not seem to be working.
> 
> irb(main):014:0\> pattern="([import]|[delete])"  
> =\> “([import]|[delete])”  
> irb(main):015:0\> pattern.match(“import”)  
> =\> #MatchData:0x2e76f9c  
> irb(main):016:0\> $1  
> =\> nil

I see two problems with your code:

1. if you want to check that a string (in your case, ‘import’) matches a  
pattern, you need to use

string.match(pattern)

which, in your case, is

‘import’.match(pattern)

1. in a regexp, the construct [abc] means one character among ‘a’, ‘b’  
or ‘c’,  
not (as I guess you think) the string ‘abc’. Because of this, the string  
‘i’  
matches your pattern:

‘i’.match(pattern)  
=\> #MatchData:0xb7bbed44

To do what you want, you simply need:

pattern = “(import|delete”)  
“import”.match pattern  
=\>#MatchData:0xb7bb7cb0  
$1  
=\> “import”

I hope this helps

Stefano

---

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [January 25, 2008, 2:48pm UTC](https://www.ruby-forum.com/t/regex-issue/127150/3 "2008-01-25T14:48:32Z")

</div>

On Jan 25, 2008 2:34 PM, Junkone [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> my pattern should match either import or delete  
> However it does not seem to be working.
> 
> irb(main):014:0\> pattern=“([import]|[delete])”  
> =\> “([import]|[delete])”  
> irb(main):015:0\> pattern.match(“import”)  
> =\> #MatchData:0x2e76f9c  
> irb(main):016:0\> $1  
> =\> nil

Try this:

irb(main):004:0\> pattern=/(import|delete)/  
=\> /(import|delete)/  
irb(main):005:0\> pattern.match “import”  
=\> #MatchData:0xb7cd1434  
irb(main):006:0\> $1  
=\> “import”

Pattern should be a regular expression. Also I think you don’t want  
square brackets, because that means matching any one character in the  
set, not the word.

Jesus.

---

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [January 25, 2008, 2:48pm UTC](https://www.ruby-forum.com/t/regex-issue/127150/4 "2008-01-25T14:48:39Z")

</div>

You don’t need parenthesis…

> > pattern = ‘import|delete’  
> > =\> “import|delete”
> 
> > ‘import’.match(pattern)[0]  
> > =\> “import”
> 
> > ‘delete’.match(pattern)[0]  
> > =\> “delete”

Regards,  
Lee
