regexp -how to match this?

Discussion in 'Ruby' started by Nanyang Zhan, Apr 9, 2007.

  1. Nanyang Zhan

    Nanyang Zhan Guest

    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

    --
    Posted via http://www.ruby-forum.com/.
    Nanyang Zhan, Apr 9, 2007
    #1
    1. Advertising

  2. On 4/9/07, Nanyang Zhan <> wrote:
    > 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

    --
    Rick DeNatale

    My blog on Ruby
    http://talklikeaduck.denhaven2.com/
    Rick DeNatale, Apr 9, 2007
    #2
    1. Advertising

  3. On 09.04.2007 15:28, Nanyang Zhan wrote:
    > 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
    Robert Klemme, Apr 9, 2007
    #3
  4. Nanyang Zhan

    Nanyang Zhan Guest

    Nanyang Zhan, Apr 9, 2007
    #4
  5. Rick DeNatale, Apr 9, 2007
    #5
  6. Nanyang Zhan

    John Joyce Guest

    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]
    On Apr 9, 2007, at 11:37 PM, Nanyang Zhan wrote:

    > Rick Denatale wrote:
    >
    >> /^.*?(?=3D<span)/

    >
    > thanks.
    >
    > BTW, what is =93Duck Typing=94?
    >
    > --=20
    > Posted via http://www.ruby-forum.com/.
    >
    John Joyce, Apr 9, 2007
    #6
  7. Nanyang Zhan wrote:

    > 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.
    Phillip Gawlowski, Apr 9, 2007
    #7
  8. Nanyang Zhan

    Nanyang Zhan Guest

    Rick Denatale wrote:

    > (?=<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.

    --
    Posted via http://www.ruby-forum.com/.
    Nanyang Zhan, Apr 10, 2007
    #8
  9. Nanyang Zhan

    Phrogz Guest

    On Apr 10, 7:00 am, Nanyang Zhan <> wrote:
    > 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."]
    Phrogz, Apr 10, 2007
    #9
  10. Nanyang Zhan

    Nanyang Zhan Guest

    Gavin Kistner wrote:
    > 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.

    --
    Posted via http://www.ruby-forum.com/.
    Nanyang Zhan, Apr 10, 2007
    #10
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. hiwa
    Replies:
    0
    Views:
    636
  2. Mikel Lindsaar
    Replies:
    0
    Views:
    482
    Mikel Lindsaar
    Mar 31, 2008
  3. Old Echo
    Replies:
    1
    Views:
    181
    Adam Shelly
    Sep 4, 2008
  4. Joao Silva
    Replies:
    16
    Views:
    359
    7stud --
    Aug 21, 2009
  5. Uldis  Bojars
    Replies:
    2
    Views:
    190
    Janwillem Borleffs
    Dec 17, 2006
Loading...

Share This Page