Hi,
I’m trying to create a Regexp object by calling eval like this:
def eval_to_regexp(o)
if o.is_a?(Regexp)
o
elsif o.is_a?(String)
o = o[5…o.size] if o[0…4] == ‘eval:’
eval("/#{o}/")
else
eval("/#{o.to_s}/")
end
end
e = eval_to_regexp(“eval:some_function() + ‘^’”)
Suppose some_function() returns the string ‘/home/test’
And then I use it to test a match as follows:
‘/home/test’ =~ e # should return 0
‘/home/test/somethingelse’ =~ e # should return nil (because of the ‘^’
above)
I also tried using /#{o}/ directly instead of the eval, but it doesn’t
work either
Thanks in advance!
Ivan V. wrote:
I’m trying to create a Regexp object by calling eval like this:
I’m sorry, but why don’t you just do regexp=Regexp.new(your_string) ?
Hi –
On Thu, 5 Jul 2007, Ivan V. wrote:
else
‘/home/test’ =~ e # should return 0
‘/home/test/somethingelse’ =~ e # should return nil (because of the ‘^’
above)
I also tried using /#{o}/ directly instead of the eval, but it doesn’t
work either
I think you might have better luck with Regexp.new:
e = Regexp.new("^#{some_function}")
or something like that.
David
Sebastian H. wrote:
Ivan V. wrote:
I’m trying to create a Regexp object by calling eval like this:
I’m sorry, but why don’t you just do regexp=Regexp.new(your_string) ?
Because I didn’t thought about that and I’m a complete newb regarding
Ruby and Regexp (in general), as pointed out by David’s correction (the
‘^’ is for the start of the string, not the end - thanks!).
Thanks a lot
On Jul 4, 2007, at 10:51 AM, Ivan V. wrote:
Suppose some_function() returns the string ‘/home/test’
I see you already have your answer, but another thing you may want to
be aware of is Regexp.escape():
def some_function; ‘/home/test’ end
re = /#{Regexp.escape(some_function)}/ # => //home/test/
re.source # => “/home/test”
James Edward G. II
I’m trying to create a Regexp object by calling eval like this:
I’m sorry, but why don’t you just do regexp=Regexp.new(your_string) ?
Because I didn’t thought about that and I’m a complete newb regarding
Ruby and Regexp (in general), as pointed out by David’s correction (the
‘^’ is for the start of the string, not the end - thanks!).
Be careful about eval()! I definitely enjoy eval() but you need to
have some perspective. It’s not for newbs.
–
Giles B.
Blog: http://gilesbowkett.blogspot.com
Portfolio: http://www.gilesgoatboy.org