http://qs1969.pair.com?node_id=23321


in reply to RE: Quantifiers in regular expressions
in thread Quantifiers in regular expressions

I don't understand this: $string = "<foo>...</foo><bar>...</bar>"; # This matches <foo></bar>, not what we want. $string =~ /\<.*\>(.*)\</.*\>/; How does it match? And I thought that the matching operator was m//, not m///. What does m/// do?

Replies are listed 'Best First'.
RE: RE: RE: Quantifiers in regular expressions
by le (Friar) on Jul 20, 2000 at 11:30 UTC
    Yeah, AM escapes the wrong chars. Let's put it right. If you say:
    $string =~ /<.*>(.*)<\/.*>/;
    on a string "<foo>...</foo><bar>...</bar>" you get everything between "<foo>" and "</bar>", because the "*" modifier is "greedy", which means it tries to match as much as possible. A "." in a regex matches anything, so ".*" matches until the end of the string. Then the rest of the regex is evaluated, done by backtracking (the regex machine is now at the end of the string and goes back one by one until it finds a match). I hope this was correct.

    Update:
    Damn HTML escaping :) I fixed it, so the strings actually show up.
Re: RE: RE: Quantifiers in regular expressions
by Anonymous Monk on Sep 24, 2002 at 23:05 UTC
    This is maching tag delimiters and their belongond text. Let`s say you have text in H1 format <h1>This is my text</h1> and you want to replace both the heading and the text with only one step. Then you`ll need such a string as the mentioned above to find a matching pair.