Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Will this Java regex return a single result or multiple

Tags:

java

regex

If my HTML is:

<tr><td>....</td><hr></tr>
<tr><td>....</td><hr></tr>
<tr><td>....</td><hr></tr>
<tr><td>....</td><hr></tr>
<tr><td>....</td><hr></tr>
<tr><td>....</td><hr></tr>

If my regex is:

Patterp p = Pattern.compile("<tr>(.*)<hr></tr>");

Should this get 1 result or all the individual rows?

Is there a way to force it to get all the rows and not just the entire html from the top <tr> to the last instance of <hr></tr> ?

like image 487
Blankman Avatar asked Dec 22 '22 03:12

Blankman


1 Answers

Your regex is using .* which is greedy. Try using .*? instead. A greedy match will grab as much as it can before matching following tokens, so it will go find the last <hr> in your source text. A non-greedy match will grab as little as it can before matching the next token(s).

Then, see this answer for more information about parsing HTML with regular expressions.

like image 144
Greg Hewgill Avatar answered Jan 06 '23 08:01

Greg Hewgill