Это довольно нормально: если вы посмотрите на пример текста, вы увидите, что между Address и Dayton, OH 45402, у вас есть <br />. (?!<br />)
, в частности, указано, что он не должен совпадать, если найден <br />
.
Вы должны использовать парсер для HTML.
Тем не менее, при условии, что все ваши файлы точно такие же, как этот пример, это уродливое регулярное выражение должно работать:
%(Address:)(.*?generalinfo_right">)(.*?)((<br />)|(</td>))(.*?generalinfo_right">)(.*?)((<br />)|(</td>))%s
Группы 1, 3 и 8 содержат адрес.
Однако, поскольку, скорее всего, ваши документы не совсем такие, гораздо лучшим решением будет анализ HTML с правильным синтаксическим анализатором.