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?
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.
Damn HTML escaping :) I fixed it, so the strings actually show up.
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.