Ну, пройдемся
(\w*)*
Две звезды необязательны, и, строго говоря, вы можете получить первым совпадением один символ. Или ноль символов.
(?:\s| )*(\w*)
Вот этот кусок имеет право совпасть ни с чем, что он, видимо и делает. Подозреваю, что если инвертировать жадность, то все взлетит. Но что точно можно было бы сделать:
- Регулярное выражение должно заканчиваться на начале следюущего тега, а не там, где оно захочет (как здесь)
- У нас должен быть как минимум один символ совпадения, а значит:
(\w*)(?:\s| )*(\w+)
- Нам вообще не нужны три последовательные подмаски:
([\w]+(?:(?:\s| )\w+)*)
- В конце концов, нас интересует, все содержимое тега:
\>([^\<]*)\<
Теперь о подходе вообще.
Забудьте о парсинге HTML с помощью регулярок. Завтра у вас с этим совпадет <div id="ratingCount">XX XX</div>
, но не совпадет <span itemprop="ratingCount"> 32 32</span>
. Есть куча замечательных библиотек, чтобы работать с html, лично я использую symfony/dom-crawler.