Может профи помогут, а то я голову сломал уже.
Есть кусок хтмл:
<span style="color: rgb(163, 1, 1); line-height: 30px;"> <span class="productSpecialPrice fl"> $126.99 </span> </span>
Почему это работает в парсере (выдёргивает цену):
'/<span[\s]*[a-zA-Z0-9=:#-\s;\"]*[\s]*>[\s]*<span class=\"productSpecialPrice fl\">[a-zA-Z;\&\$\s]*([0-9\.]*)[a-zA-Z;\&\$\s]*<\/span>[\s]*<\/span>/';
а это нет:
'/<span[\s]*style=\"color:[\s]*[a-z\(0-9,\s\)]*\;[\s]*line\-height:[\s]*[0-9a-z]*\;\">[\s]*<span class=\"productSpecialPrice fl\">[a-zA-Z;\&\$\s]*([0-9\.]*)[a-zA-Z;\&\$\s]*<\/span>[\s]*<\/span>/';
Хотя по функции print_r совсем наоборот - то что работает в парсере, preg_match_all возвращает ничего, а то что в парсере не работает в простой проверке регэкспа даёт значение.
Спасибо
Спустя 2 минуты, 40 секунд (31.07.2012 - 00:09) Игорь_Vasinsky написал(а):
Я бы вообще так писал
или если без валюты то
#<span class=\"productSpecialPrice fl\">([^<].*)</span> </span>#iusU
или если без валюты то
#<span class=\"productSpecialPrice fl\">\s?\$([^<].*)</span> </span>#iusU
Спустя 3 минуты, 27 секунд (31.07.2012 - 00:12) Winston написал(а):
Потому что лучше так написать
А не городить черти что...
Свернутый текст
$str = '<span style="color: rgb(163, 1, 1); line-height: 30px;"> <span class="productSpecialPrice fl"> $126.99 </span> </span>
<span style="color: rgb(163, 1, 1); line-height: 30px;"> <span class="productSpecialPrice fl"> $106 </span> </span>';
preg_match_all('#(?<=productSpecialPrice fl">)(.*)(?=</span>)#isU', $str, $m);
echo '<pre>' . print_r($m, 1);
А не городить черти что...
Спустя 5 минут, 49 секунд (31.07.2012 - 00:18) livemotion написал(а):
У меня две проверки...
Нужно искать и выдёргивать одну цену:
или (если такой код), то две...
В регэкспах не силён, поэтому пишу как по шаблону ))
Нужно искать и выдёргивать одну цену:
<span style="color: rgb(163, 1, 1); line-height: 30px;"> <span class="productSpecialPrice fl"> $49.99 </span> </span>
или (если такой код), то две...
<span class="normalprice cen" style="font-size: 16px; color: rgb(153, 153, 153);"><strong>$4.32</strong></span> <span style="font-size: 18px; padding-left: 10px; color: rgb(244, 123, 32);"> Save 10%</span> <br> <span class="productSpecialPrice fl"> $3.88 </span> </span>
В регэкспах не силён, поэтому пишу как по шаблону ))
Спустя 2 минуты, 10 секунд (31.07.2012 - 00:20) Winston написал(а):
А так?
Не?
'#(?<=\$)([\d.]++)#'
Не?
Спустя 40 минут, 57 секунд (31.07.2012 - 01:01) livemotion написал(а):
Блин.. при простой проверке всё правильно, но в парсере не работает (( Но почему-то работает тот регэксп, который валится на проверке...
$price_finder='#(?<=productSpecialPrice fl">)(.*)(?=</span>)#isU';
$special_price_finder='#(?<=\$)([\d.]++)#';
//$special_price_else_finder=
preg_match_all($price_finder,$full_product_info_html,$price);
if($price[0]==null)
{
preg_match_all($special_price_finder,$full_product_info_html,$special_price);
if ($special_price[0]==null){
//дописать проверку
preg_match_all($special_price_else_finder,$full_product_info_html,$else_special_price);
$special_price[1][0]=$else_special_price[2][0];
$special_price[2][0]=$else_special_price[1][0];
}
$price[1][0]=$special_price[1][0];
$price[1][0]=$price[1][0]+($price[1][0]*$_POST['price_up']);
$special_price[2][0]=$special_price[2][0]+($special_price[2][0]*$_POST['price_up']);
$discount=$price[1][0]-$special_price[2][0];
$discount=($discount/$price[1][0])*100;
$discount=$discount."%";
}
else
{
$discount="";
$special_price[2][0]="";
$price[1][0]=$price[1][0]+($price[1][0]*$_POST['price_up']);
Спустя 3 минуты, 10 секунд (31.07.2012 - 01:04) Winston написал(а):
Что показывает print_r($price); пропиши перед проверкой (if)
Спустя 13 минут, 30 секунд (31.07.2012 - 01:18) livemotion написал(а):
Winston
Просто:
Просто:
Array
Спустя 41 минута, 23 секунды (31.07.2012 - 01:59) livemotion написал(а):
Сыплю голову пеплом...
Winston
Спасибо за подсказку... Я браузером вижу один код, а парсер file_get_contents-ом вытягивает немного по другому... ))
Всем благодарности за помощь ))
Winston
Спасибо за подсказку... Я браузером вижу один код, а парсер file_get_contents-ом вытягивает немного по другому... ))
Всем благодарности за помощь ))