Trying to use regex


#1

hi i am trying to strip out text between body tags but when run it i
get:

rob@rob-laptop:~/ruby$ ./html2.rb
./html2.rb:14: unknown regexp options - bdy
./html2.rb:14: unterminated string meets end of file
./html2.rb:14: parse error, unexpected tSTRING_END, expecting
tSTRING_CONTENT or tREGEXP_END or tSTRING_DBEG or tSTRING_DVAR

#! /usr/bin/ruby

@h = File.open “test.html”
@response = @h.gets

text = @response.scan(/<body[^>]*>(.+?)/)[0]
puts text


#2

On 20 Jun 2007, at 17:15, merrittr wrote:

#! /usr/bin/ruby

@h = File.open “test.html”
@response = @h.gets

text = @response.scan(/<body[^>]*>(.+?)/)[0]
puts text

You need to escape the ‘/’ in your regexp, and unless your html file
is one line you may need to also add the multiline option:

text = @response.scan(/<body[^>]*>(.+?)</body>/m)[0]

Alex G.

Bioinformatics Center
Kyoto University


#3

On Jun 20, 2007, at 4:41 AM, Alex G. wrote:

#! /usr/bin/ruby
text = @response.scan(/<body[^>]*>(.+?)</body>/m)[0]

Alex G.

Bioinformatics Center
Kyoto University

Or you can use the %r{} form of a Regexp literal:

text = @response.scan(%r{<body\b.?>(.?)}mi)[0]

\b matches a “word boundary”
m is the multi-line option that causes . to match newlines, too
i is the case insensitive option (so BODY would also be matched)

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#4

merrittr wrote:

hi i am trying to strip out text between body tags but when run it i
get:

HTML parsing can get quite complicated, why not use a library? I’ve
heard great things about http://code.whytheluckystiff.net/hpricot/