Вы не должны использовать (.*)
это жадный
Вот пример, почему вы не должны использовать его в вашем случае
<description>
<otherstuff>
</otherstuff>
<description>
<description>hello<\description>
</description>
<\description>
Предположим, что здесь мы используем <description>(.*)<description>(.*)</description>
Это будет разбирать:
<description>
<description>hello<\description>
</description>
<\description>
Так что, если вы хотите разобрать только то, что находится во втором описании, вы должны использовать (.*?)
, это называется не жадным
Использование <description>(.*)<description>(.*?)</description>
будет анализировать:
<description>
<description>hello<\description> # end of parse
# here <\description> is missing cause (.*?) will look only for the first match
Таким образом, вы должны использовать (.*?)
, он прекратит синтаксический анализ сразу же, когда найдет первое совпадение конца, но (.*)
будет жадным, поэтому будет искать максимально возможное совпадение
Так что, если вы используете <description>(.*)<description>(.*?)</description>
, все будет в порядке, потому что он будет анализировать только то, что находится внутри описания в вашем случае