# Disable regexp warning

**URL:** <https://www.ruby-forum.com/t/disable-regexp-warning/137475>\
**Category:** Ruby\
**Created:** [May 13, 2008, 3:09pm UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475 "2008-05-13T15:09:32Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 13, 2008, 3:09pm UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/1 "2008-05-13T15:09:32Z")

</div>

Hi there !

Is there a way to disable regexp warning ?

I want to do this:

begin  
re = /#{str}/  
rescue

# invalid regexp

return “invalid regexp  
#{str.inspect}”  
end

without having tons of messages printed on stderr. Any clue ?

Thanks,

Gaspard

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 13, 2008, 3:45pm UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/2 "2008-05-13T15:45:33Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

I don’t see your problem.

===  
def test  
str = “a\*(”

begin  
re = /#{str}/  
rescue RegexpError =\> e  
# invalid regexp  
“invalid regexp #{str.inspect}:  
#{e.message}”  
end  
end

# puts test.inspect

doesn’t print any errors. I double checked that warnings are on and  
the warning level was set to highest.

If it does not work with your ruby version, please post the version  
string of you ruby installation (obtained by “ruby -v”).

Regards,  
Florian G.

On May 13, 2008, at 3:08 PM, Gaspard B. wrote:

> return “invalid regexp #{str.inspect}\</  
> span\>”  
> end
> 
> without having tons of messages printed on stderr. Any clue ?
> 
> Thanks,
> 
> Gaspard

-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkgpmyoACgkQJA/zY0IIRZbOSwCeNQelH1ZsQkg7wD6LjFtQwEwy  
HYEAoKXytOhB9IkwM4HC7vaGpwkWzLaa  
=CkEQ  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 14, 2008, 9:28am UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/3 "2008-05-14T09:28:33Z")

</div>

This is crazy. When I write a simple test case with your example it  
works just fine but I still get this message when running all the  
tests:  
/lib/parser/test/…/lib/rules/zena.rb:231: warning: regexp has invalid  
interval  
./lib/parser/test/…/lib/rules/zena.rb:231: warning: regexp has `}' without escape compiled-template:1: warning: regexp has invalid interval compiled-template:1: warning: regexp has `}’ without escape

This message does not come from the simple test I wrote but from this  
test:  
ruby test/helpers/zena\_parser\_test.rb --name test\_basic\_show\_mean\_gsub

[edit] Ok, I found the problem:

def test\_bad\_regexp  
assert\_equal “invalid regexp "# {puts  
‘I AM MEAN’}"”, validate\_regexp(“# {puts ‘I AM MEAN’}”)  
end

private  
def validate\_regexp(str)  
begin  
re = /#{str}/  
rescue =\> e  
# invalid regexp  
“invalid regexp #{str.inspect}”  
end  
end

The regexp is seen as valid even though it is not. It’s the actual run  
of the regexp in a gsub that prints the error message.

Is there a way to detect this error ?

Thanks for your help.

Gaspard

Here is the code in place:  
[http://dev.zenadmin.org/browser/trunk/lib/parser/lib/rules/zena.rb#L231](http://dev.zenadmin.org/browser/trunk/lib/parser/lib/rules/zena.rb#L231)

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 15, 2008, 12:02am UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/4 "2008-05-15T00:02:19Z")

</div>

There is a space after ‘#’. The test actually makes sure no one can  
inject ruby. So the role of the function to test is to replace ‘#{…}’  
by ‘# {…}’, but then the {…} is invalid but does not raise an  
exception which is annoying.

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 18, 2008, 9:05am UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/5 "2008-05-18T09:05:39Z")

</div>

I still cannot find a solution to disable regex warning in the  
following situation:

def valid\_regexp?(str)  
begin  
re = /#{str}/  
true  
rescue  
false  
end  
end

# should return false and not print a warning

valid\_regexp?(“foo{bar}”)  
=\> true, prints warning…

Many thanks for your help, advice.

Gaspard

should print “bad regexp”, but returns

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 14, 2008, 3:09pm UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/6 "2008-05-14T15:09:33Z")

</div>

On Wed, May 14, 2008 at 3:27 AM, Gaspard B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ruby test/helpers/zena\_parser\_test.rb --name test\_basic\_show\_mean\_gsub  
> begin  
> re = /#{str}/  
> rescue =\> e  
> # invalid regexp  
> “invalid regexp #{str.inspect}”  
> end  
> end
> 
> The regexp is seen as valid even though it is not. I

Well the regexp you’re testing IS valid, perhaps it’s not the regexp  
you think it is:

irb(main):009:0\> a = “#{puts ‘I am mean’}”  
I am mean  
=\> “”  
irb(main):010:0\> a  
=\> “”  
irb(main):011:0\> /#{a}/  
=\> //

Remember that puts return nil, and nil.to\_s is an empty string.

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 18, 2008, 2:57pm UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/7 "2008-05-18T14:57:53Z")

</div>

Thanks Heesob P. !

That’s exactly what I needed.

Gaspard

---

<div class="post-metadata">

**Author:** ![gazoduc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/c5a1d2/32.png) [@gazoduc](https://www.ruby-forum.com/u/gazoduc)\
**Post date:** [May 18, 2008, 9:59am UTC](https://www.ruby-forum.com/t/disable-regexp-warning/137475/8 "2008-05-18T09:59:18Z")

</div>

Hi,

Gaspard B. wrote:

> I still cannot find a solution to disable regex warning in the  
> following situation:
> 
> def valid\_regexp?(str)  
> begin  
> re = /#{str}/  
> true  
> rescue  
> false  
> end  
> end
> 
> # should return false and not print a warning
> 
> valid\_regexp?(“foo{bar}”)  
> =\> true, prints warning…

You can do something like this:

def valid\_regexp?(str)  
begin  
output = StringIO.open(’’,‘w’)  
$stderr = output  
re = /#{str}/  
output.string !~ /warning:/  
rescue  
false  
ensure  
$stderr = STDERR  
end  
end

# should return false and not print a warning

valid\_regexp?(“foo{bar}”)

Regards,

Park H.
