Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > regexp exclusion search - find matches NOT ending with a string?

Reply
Thread Tools

regexp exclusion search - find matches NOT ending with a string?

 
 
BrendanC
Guest
Posts: n/a
 
      07-17-2009
I have the following text in a file:

1 a1.html
2 b.doc
3 c.xml
4 d.tiff
5 e.jpeg
6 f.html
....

I need a regexp to match lines except those that end with ending in
".html" - iow - I want lines 2-5 above. I believe this may require a
negative lookbehind match. I tried the following but Ruby (1. gives
an undefined sequence error :

$(?<!\.html) # <---- this seems to work with other engines

Before you jump re Ruby the version I also tested this here -
http://www.rubyxp.com/ and get invalid expression (fyi this tests with
Ruby 1.9). Any ideas/alternatives?

TIA,
BC


 
Reply With Quote
 
 
 
 
Xavier Noria
Guest
Posts: n/a
 
      07-17-2009
On Fri, Jul 17, 2009 at 2:35 AM, BrendanC<(E-Mail Removed)> wrote:

> I have the following text in a file:
>
> 1 a1.html
> 2 b.doc
> 3 c.xml
> 4 d.tiff
> 5 e.jpeg
> 6 f.html
> ....
>
> I need a regexp to match lines except those that end with ending in
> ".html"


The easiest path is to negate that it matches, say for instance:

if filename !~ /\.html\z/
# non-HTML here
end

-- fxn

 
Reply With Quote
 
 
 
 
David A. Black
Guest
Posts: n/a
 
      07-17-2009
Hi --

On Fri, 17 Jul 2009, BrendanC wrote:

> I have the following text in a file:
>
> 1 a1.html
> 2 b.doc
> 3 c.xml
> 4 d.tiff
> 5 e.jpeg
> 6 f.html
> ....
>
> I need a regexp to match lines except those that end with ending in
> ".html" - iow - I want lines 2-5 above. I believe this may require a
> negative lookbehind match. I tried the following but Ruby (1. gives
> an undefined sequence error :
>
> $(?<!\.html) # <---- this seems to work with other engines
>
> Before you jump re Ruby the version I also tested this here -
> http://www.rubyxp.com/ and get invalid expression (fyi this tests with
> Ruby 1.9). Any ideas/alternatives?


I would probably do:

lines.reject {|line| line =~ /html$/ }


David

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Now available: The Well-Grounded Rubyist (http://manning.com/black2)
Training! Intro to Ruby, with Black & Kastner, September 14-17
(More info: http://rubyurl.com/vmzN)

 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      07-17-2009
On 7/17/09, BrendanC <(E-Mail Removed)> wrote:
> I have the following text in a file:
>
> 1 a1.html
> 2 b.doc
> 3 c.xml
> 4 d.tiff
> 5 e.jpeg
> 6 f.html
> ....
>
> I need a regexp to match lines except those that end with ending in
> ".html" - iow - I want lines 2-5 above. I believe this may require a
> negative lookbehind match. I tried the following but Ruby (1. gives
> an undefined sequence error :
>
> $(?<!\.html) # <---- this seems to work with other engines
>
> Before you jump re Ruby the version I also tested this here -
> http://www.rubyxp.com/ and get invalid expression (fyi this tests with
> Ruby 1.9). Any ideas/alternatives?

Xavier and David gave good advice.
If however you really have to have a matching regex

%r($(?<!\.html)\z) # is that what you meant above?

works fine. I believe that you can install Oniguruma on 1.8 as a gem
for that purpose.
HTH
Robert



--=20
Toutes les grandes personnes ont d=92abord =E9t=E9 des enfants, mais peu
d=92entre elles s=92en souviennent.

All adults have been children first, but not many remember.

[Antoine de Saint-Exup=E9ry]

 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      07-17-2009
>
> %r($(?<!\.html)\z) # is that what you meant above?

where does this $ come from ?

 
Reply With Quote
 
Rob Biedenharn
Guest
Posts: n/a
 
      07-17-2009

On Jul 17, 2009, at 11:30 AM, Glenn Jackman wrote:

> At 2009-07-16 08:59PM, "David A. Black" wrote:
>> On Fri, 17 Jul 2009, BrendanC wrote:
>>> $(?<!\.html) # <---- this seems to work with other engines

>>
>> I would probably do:
>>
>> lines.reject {|line| line =~ /html$/ }

>
> Is the Ruby regular expression syntax documented anywhere?
>
> I was attempting to use a look-behind, but it's not supported.
>
> The syntax is not documented in the RegExp rdocs, and I haven't seen a
> site that spells out all the nitty-gritty details and pokes into the
> dark corners.
>
> I'm looking for the Ruby equivalent of:
> http://www.tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm
> http://docs.python.org/library/re.ht...ression-syntax
> http://perldoc.perl.org/perlre.html
>
> Does it exist?
>
>
> --
> Glenn Jackman
> Write a wise saying and your name will live forever. -- Anonymous
>



You could try the Regular Expressions section of the Standard Types
chapter of Programming Ruby. Be advised that this is the online
version of the 1st edition that is now 8 years old. Since you seem to
be using a version 1.8.x of Ruby, the Regexp parts are going to be
mostly the same.

http://www.ruby-doc.org/docs/ProgrammingRuby/

-Rob

Rob Biedenharn http://agileconsultingllc.com
http://www.velocityreviews.com/forums/(E-Mail Removed)


 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      07-17-2009
On 7/17/09, Glenn Jackman <(E-Mail Removed)> wrote:
> At 2009-07-16 08:59PM, "David A. Black" wrote:
>> On Fri, 17 Jul 2009, BrendanC wrote:
>> > $(?<!\.html) # <---- this seems to work with other engines

>>
>> I would probably do:
>>
>> lines.reject {|line| line =~ /html$/ }

>
> Is the Ruby regular expression syntax documented anywhere?
>
> I was attempting to use a look-behind, but it's not supported.
>
> The syntax is not documented in the RegExp rdocs, and I haven't seen a
> site that spells out all the nitty-gritty details and pokes into the
> dark corners.
>
> I'm looking for the Ruby equivalent of:
> http://www.tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm
> http://docs.python.org/library/re.ht...ression-syntax
> http://perldoc.perl.org/perlre.html
>
> Does it exist?

For Oniguruma I found this most helpful
http://manual.macromates.com/en/regu...ar_expressions
>
>
> --
> Glenn Jackman
> Write a wise saying and your name will live forever. -- Anonymous

Nice one

Cheers
Robert

 
Reply With Quote
 
7stud --
Guest
Posts: n/a
 
      07-18-2009
BrendanC wrote:
> I have the following text in a file:
>
> 1 a1.html
> 2 b.doc
> 3 c.xml
> 4 d.tiff
> 5 e.jpeg
> 6 f.html
> ....
>
> I need a regexp to match lines except those that end with ending in
> ".html" - iow - I want lines 2-5 above.


Some alternate means to the same end:

IO.foreach("data.txt") do |line|

#1
if line.chomp.split(".")[-1] != "html"
puts line
end

#2
if line[-5, 4] != "html"
print line
end

#3
if line.slice(-5..-1) != "html"
print line
end

puts
end

--output:--
2 b.doc
2 b.doc
2 b.doc

3 c.xml
3 c.xml
3 c.xml

4 d.tiff
4 d.tiff
4 d.tiff

5 e.jpeg
5 e.jpeg
5 e.jpeg
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Brian Candler
Guest
Posts: n/a
 
      07-18-2009
Glenn Jackman wrote:
> Is the Ruby regular expression syntax documented anywhere?
>
> I was attempting to use a look-behind, but it's not supported.
>
> The syntax is not documented in the RegExp rdocs


In my opinion, documentation is Ruby's weakest aspect by far - and the
deficiency has gotten substantially worse with ruby 1.9.

Best available information is in third-party books, which presumably
have reverse-engineered from the source code. I fairly often resort to
irb to check behaviour is what I want, and have on occasions had to
resort to reading the source.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
replace random matches of regexp gry Python 4 09-08-2011 09:19 PM
[regexp] How to convert string "/regexp/i" to /regexp/i - ? Joao Silva Ruby 16 08-21-2009 05:52 PM
[Regexp] Howto capture all matches of a single group ersin.er@gmail.com Java 3 10-03-2005 10:11 AM
multiple regexp matches Kevin Howe Ruby 27 08-24-2004 02:30 PM
Please help with regexp - finding all matches? Boris Pelakh Perl 3 04-08-2004 08:14 PM



Advertisments