preg_match_all('#<div class="details">(.*)(</div>).#is', $string, $matches);
to już trochę bliżej rozwiązania, jednak w przypadku gdy istnieje w tekście kilka wyrażeń ograniczonych przez <div class="details>...</div> np
$string = '<div class="details">
<strong>Ĺšroda</strong><br />
3°C/-5°C<br />
<span class="precipitation">30%</span><br />
33 km/h<br />
MarznÄ?ce opady
</div>
</li>
</ul>
<ul>
<li>
<img src="/images/WeatherGroups/10s.png" border="0">
<div class="details">
<strong>Czwartek</strong><br />
5°C/9°C<br />
<span class="precipitation">30%</span><br />
50 km/h<br />
Śnieg
</div>
</li>
</ul>
<ul>
<li>
<img src="/images/WeatherGroups/10s.png" border="0">
';
to w takim przypadku Twój kod znajduje tylko jedno dopasowanie, a moim celem jest, aby znalazł dwa osobne.