Регулярное выражение содержимого PHP между двумя строками - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь получить контент между двумя строками JS код:

strs += '<span>';


strs += '17S32 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'
strs += '17S33 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'

strs += '</span>';

Я попробовал следующий неудачный подход:

preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);

Мой желаемый результат - массив со следующим:

array(
    0 => '17S32 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA',
    1 => '17S33 - TAKATA FRONT AIRBAG INFLATOR - AUSTRALIA'
)

1 Ответ

0 голосов
/ 29 апреля 2018

Здесь есть несколько проблем с регулярным выражением:

                  ↓              ↓                        ↓
preg_match('#strs += \'<span>\';(.*?)strs += \'</span>\';#', $html, $matches);
  • + нужно убежать
  • Для . требуется, чтобы флаг #s совпадал между переносами строк
  • И стилистически, вы должны были использовать самые внешние " двойные кавычки, чтобы избежать экранирования одинарных кавычек.

Тем не менее, простое извлечение текста не даст вам желаемого списка. Более простой подход - просто поиск данных, добавляемых в настоящую строку - учитывая, что они несколько последовательны:

 preg_match_all("/^\s*strs \+= '((?!<).+)'/m", $src, $matches);

Где (?!<) просто исключает что-либо вроде <span>. Вместо этого вы можете сделать больше белого списка для ожидаемого содержимого строки. И, очевидно, это возможно только в том случае, если текст является несколько непротиворечивым, не соблюдает синтаксис JS слишком сильно и т. Д. - Однако в целом это более простой подход, я думаю.

...