Будет ли это регулярное выражение Java возвращать один результат или несколько - PullRequest
4 голосов
/ 18 апреля 2010

Если мой HTML:

<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>

Если мое регулярное выражение:

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

Должно ли это получить 1 результат или все отдельные строки?

Есть ли способ заставить его получить все строки, а не только весь html от верхнего <tr> до последнего экземпляра <hr></tr>?

1 Ответ

11 голосов
/ 18 апреля 2010

Ваше регулярное выражение использует .*, что жадный . Попробуйте использовать .*? вместо этого. Жадное совпадение получит как много столько, сколько может, перед сопоставлением следующих токенов, так что он найдет последний <hr> в вашем исходном тексте. Нежадное совпадение будет захватываться как немного , как это возможно до сопоставления следующего токена (ов).

Затем см. этот ответ для получения дополнительной информации о разборе HTML с помощью регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...