i have a small problem, i want to find in <tr><td>3</td><td>foo</td><td>2</td>
the foo, i use: $<tr><td>\d</td><td>(.*)</td>$
to find the foo, but it dont work because it dont match with the </td>
at the end of foo but with the </td>
at the end of the string
views:
55answers:
3Use:
^<tr><td>\d</td><td>(.*?)</td>
(insert obligatory comment about not using regex to parse xml)
You have to make the .*
lazy instead of greedy. Read more about lazy vs greedy here.
Your end of string anchors ($
) also don't make sense. Try:
<tr><td>\d<\/td><td>(.*?)<\/td>
(As seen on rubular.)
NOTE: I don't advocate using regex to parse HTML. But some times the task at hand is simple enough to be handled by regex, for which a full-blown XML parser is overkill (for example: this question). Knowing to pick the "right tool for the job" is an important skill in programming.
Your leading $
should be a ^
.
If you don't want to match all of the way to the end of the string, don't use a $
at the end. However, since *
is greedy, it'll grab as much as it can. Some regex implementations have a non-greedy version which would work, but you probably just want to change (.*)
to ([^<]*)
.