Regex issue

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

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

On Jan 25, 2008 2:34 PM, Junkone [email protected] 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.

You don’t need parenthesis…

pattern = ‘import|delete’
=> “import|delete”

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

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

Regards,
Lee