regexp -how to match this?

N

Nanyang Zhan

what kind of pattern will match the part of sentence before a <span>
tag?

for instance:
for this sentence:
This forum is connected to a mailing list that is read by <span
class="wow">thousands</span> of people.

it'll match:
This forum is connected to a mailing list that is read by
 
R

Rick DeNatale

what kind of pattern will match the part of sentence before a <span>
tag?

for instance:
for this sentence:
This forum is connected to a mailing list that is read by <span
class="wow">thousands</span> of people.

it'll match:
This forum is connected to a mailing list that is read by

/^.*?(?=<span)/

This is a little loose since it treats anything starting with "<span"
as a span tag.

Breaking it down:

^ - start of string

*? - 0 or more characters, non-greedy, otherwise this would match
everything up to the LAST "<span" in the string, in stead of the first
which is what I suspect you really want.

(?=<span) - This is a zero-length lookahead, this means that "<span"
must occur just after what has been matched, but it will not be part
of the match itself.

HTH
 
R

Robert Klemme

what kind of pattern will match the part of sentence before a <span>
tag?

for instance:
for this sentence:
This forum is connected to a mailing list that is read by <span
class="wow">thousands</span> of people.

it'll match:
This forum is connected to a mailing list that is read by

One way to do it:

irb(main):022:0* s='This forum is connected to a mailing list that is
read by <span
irb(main):023:0' class="wow">thousands</span> of people.'
=> "This forum is connected to a mailing list that is read by
<span\nclass=\"wow\">thousands</span> of people."
irb(main):024:0> s[/\A(.*?)<span/, 1]
=> "This forum is connected to a mailing list that is read by "

robert
 
J

John Joyce

Using the old saying,
"If it walks like a duck and talks like a duck, then it is a duck."
It means deciding something is a duck if it seems to be a duck.
Part of the principle of least surprise [to Matz]
 
P

Phillip Gawlowski

Nanyang said:
BTW, what is “Duck Typing�

PickAxe 2nd Edition (and probably the freely available 1st Edition) have
a nice, interesting and very readable chapter covering that.

In a nutshell: What the other's have already said.

--
Phillip "CynicalRyan" Gawlowski
http://cynicalryan.110mb.com/

Rule of Open-Source Programming #6:

The user is always right unless proven otherwise by the developer.
 
N

Nanyang Zhan

Rick said:
(?=<span) - This is a zero-length lookahead, this means that "<span"
must occur just after what has been matched, but it will not be part
of the match itself.

so ?= makes pattern lookAHEAD. How to make pattern lookBEHIND?

for instance:

example sentence:
This forum is connected to a mailing list that is read by <span
class="wow">thousands</span> of people.

question:
how to make a Regexp to match the words followed by the </span> tag?

a /<\/span>.*/ will include the tag, which isn't what I want.
 
P

Phrogz

so ?= makes pattern lookAHEAD. How to make pattern lookBEHIND?

http://phrogz.net/ProgrammingRuby/language.html#extensions

Zero-width positive and negative lookaheads are supported in Ruby's
regexp engine in 1.8. Zero-width lookbehind assertions are not
supported by the current regexp engine. (However, they are supported
by Oniguruma, the regexp engine used in 1.9 and future builds of
Ruby.)
example sentence:
This forum is connected to a mailing list that is read by <span
class="wow">thousands</span> of people.

question:
how to make a Regexp to match the words followed by the </span> tag?

Just because you consume them doesn't mean you have to use them. Use
parentheses to saved parts of text extracted by your regular
expression.

irb(main):001:0> str = 'is read by <span class="wow">thousands</span>
of people.'
=> "is read by <span class=\"wow\">thousands</span> of people."

irb(main):002:0> str[ /<\/span>(.+)/, 1 ]
=> " of people."

irb(main):003:0> %r{</span>(.+)}.match( str ).to_a
=> ["</span> of people.", " of people."]
 
N

Nanyang Zhan

Gavin said:
Just because you consume them doesn't mean you have to use them. Use
parentheses to saved parts of text extracted by your regular
expression.

I'm trying to code one method(with one regexp input) to extract any part
of a given string.

but now it seems a fix method is very hard to accomplish this job.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top