Здесь есть несколько проблем с регулярным выражением:
↓ ↓ ↓
preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);
-
+
нужно убежать
- Для
.
требуется, чтобы флаг #s
совпадал между переносами строк
- И стилистически, вы должны были использовать самые внешние
"
двойные кавычки, чтобы избежать экранирования одинарных кавычек.
Тем не менее, простое извлечение текста не даст вам желаемого списка. Более простой подход - просто поиск данных, добавляемых в настоящую строку - учитывая, что они несколько последовательны:
preg_match_all("/^\s*strs \+= '((?!<).+)'/m", $src, $matches);
Где (?!<)
просто исключает что-либо вроде <span>
. Вместо этого вы можете сделать больше белого списка для ожидаемого содержимого строки. И, очевидно, это возможно только в том случае, если текст является несколько непротиворечивым, не соблюдает синтаксис JS слишком сильно и т. Д. - Однако в целом это более простой подход, я думаю.