Если вы не полагаетесь на регулярное выражение для проверки html, и у вас нет прав на изменение структуры html. Кроме того, необходимо избавиться от последнего .*?
, потому что первый будет конфликтовать для последующих матчей. По сути, у вас есть .*?.*?
, потому что движок будет пытаться найти все возможные перестановки всех символов между последним тегом <strong>
и следующим тегом <div class="ui-a">
. Очень неэффективно. Попробуйте это:
.*?<div class="ui-a">.*?<strong>(.*?)</strong>.*?<p>(.*?)</p>.*?</div>.*?<div class="ui-c">.*?<strong>(.*?)</strong>
Примечание: вы уверены, что хотите найти первый тег <strong>
внутри <div class="ui-a">
, потому что первый тег <strong>
появляется внутри <div class="ui-b">
, и в этом случае это:
.*?<div class="ui-b">.*?<strong>(.*?)</strong>.*?<p>(.*?)</p>.*?</div>.*?<div class="ui-c">.*?<strong>(.*?)</strong>
точнее.
Если вы знаете, что в нужных группах захвата нет вложенных тегов, вы можете дополнительно оптимизировать их с помощью:
.*?<div class="ui-b">.*?<strong>([^<]*)</strong>.*?<p>([^<]*)</p>.*?</div>.*?<div class="ui-c">.*?<strong>([^<]*)</strong>