В целом - да, нужно одну регулярку на всё письмо, но это что касается одной сущности, то есть для товаров вы пишете регулярку общую, начиная с самого первого символа в тексте.
Существуют также разные модификаторы, они помогают обрабатывать содержимое, ибо здесь очень много нюансов.
Вот сервис, где можно тестировать
https://regex101.com он может найти только первый элемент, дальше уже не получается так как нахватает модификаторов, незнаю как без них это сделать.
так было:
p\sclass="text-left code".*?>[#product_articul]\s.*?<\/p>\n\W*p\sclass="name".*?>[#product_name]<\/p>\n.*<\/th><\/tr><\/tbody><\/table><\/th>\n.*<th\sclass="small-3\slarge-2\scolumns".*?><table.*?><tbody><tr.*?><th.*?>\n\W*p\sclass="quantity".*?>[#product_count]\s.*?<\/p>\n.*?<\/th><\/tr><\/tbody><\/table><\/th>\n.*?<th.*?><table.*?><tbody><tr.*?><th.*?>\n\W*p\sclass="price".*?<\/p>\n\W*p\sclass="one_price".*?>[#product_price]\s.*?<\/p>
Так стало:
<tbody>.*?<p\sclass=\"text\-left\scode\".*?padding:\s0\; text\-align\:\sleft\;\">[#product_articul]\s.*?<\/p>.*?<p\sclass="name".*?padding:\s0\; text\-align\:\sleft\;\">[#product_name]<\/p>.*?<p class="quantity".*?padding:\s0\; text\-align\:\sright\;\">[#product_count]шт.*?<p class="price".*?padding:\s0\; text\-align\:\sright\;\">[#product_price]UAH
+ модификатор
А это для проверки в сервисе
<tbody>.*?<p\sclass=\"text\-left\scode\".*?padding:\s0\; text\-align\:\sleft\;\">(.*?)\s.*?<\/p>.*?<p\sclass="name".*?padding:\s0\; text\-align\:\sleft\;\">(.*?)<\/p>.*?<p class="quantity".*?padding:\s0\; text\-align\:\sright\;\">(.*?)шт.*?<p class="price".*?padding:\s0\; text\-align\:\sright\;\">(.*?)UAH
Находит
Просто регулярна неправильная была