Я пытаюсь получить некоторые данные из Amazon, и я использую preg_match, чтобы найти нужные мне элементы. Однако у меня проблемы.Regex "|" Проблемы
Я совмещаю два утверждения, поэтому, если он не находит его, он ищет другого. Я считаю, что если продукт не указан, одна из этих вещей всегда будет существовать.
Так что его работа ищет стоимость доставки. Если его нет, он ищет текст «FREE Shipping».
preg_match_all('/(& <b>(.*?)<|<span class="olpShippingPrice">(.*?)<)/',$results,$match1);
Если я запускаю это я получаю данные, которые я хочу, но это захватывая некоторые HTML, которые не были бы захваченный, если я побежал это в двух отдельных preg_matches. Я не могу понять, как это показать, но он захватывает жирный тег в первой «БЕСПЛАТНОЙ доставке» и весь текст ниже, который выделен жирным шрифтом. Вы также можете увидеть морковь.
[1]=>
array(10) {
[0]=>
string(38) "$30.00<"
[1]=>
string(37) "$6.99<"
[2]=>
string(37) "$6.99<"
[3]=>
string(38) "$53.99<"
[4]=>
string(37) "$5.25<"
[5]=>
string(19) "& FREE Shipping<"
[6]=>
string(19) "& FREE Shipping<"
[7]=>
string(19) "& FREE Shipping<"
[8]=>
string(19) "& FREE Shipping<"
[9]=>
string(38) "$70.39<"
}
Так что мой вопрос: Что я должен сделать, чтобы удалить тег и морковь от этого, так что я оставил с чистыми данным? Кроме того, запуск этих двух отдельных preg_match не работает для меня.
удалить '<' от матча –
Как это дубликат? Кажется довольно уникальным для меня. –
@ smack-a-bro Поскольку разбор HTML с регулярным выражением является плохим, и ответ на связанный вопрос является предупреждением, которое нужно учитывать. *** Особенно ***, когда вы не контролируете исходный HTML. –