паттерн preg_match

12 3
dspu
На сайте с 10.05.2006
Offline
268
1596

Каким паттерном получить цифру 156 из "<div id=resultStats>156 results<nobr>"?

(индекс гугла)

"!resultStats\>(.*?) results!si"

не работает

siv1987
На сайте с 02.04.2009
Offline
427
#1

"!resultStats>(\d+) results!si"

"!resultStats>([\w\d]+) results!si"

"!resultStats>([^\s]+) results!si"

Rulin
На сайте с 16.01.2008
Offline
143
#2
dspu:
Каким паттерном получить цифру 156 из "<div id=resultStats>156 results<nobr>"?

$subject = "<div id=resultStats>156 results<nobr>";

$pattern = '/<div[^>]+id=(?:\'|"|)resultStats(?:\'|"|)[^>]*>(\d+)\s/i';

if (preg_match($pattern, $subject, $matches))
echo $matches[1];
Bitcoin Debit Card
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3

$text='<div id=resultStats>156 results<nobr>';

preg_match('@<div id=resultStats>(.*?) @smi',$text,$col);

echo $col[1];

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Rulin
На сайте с 16.01.2008
Offline
143
#4

Чтоб было понятно: Мой вариант паттерна сделан с учетом html стандартов, и если формат результата чуть измениться (в пределах html стандарта), например добавиться атрибут class или title в div, либо и то и другое, или местами поменяются атрибуты внутри div, или id будет в двойных кавычках (по стандарту он должен быть именно в них)

например так:

<div class="result" id="resultStats" title="Your Result" >156 results<nobr>

, то паттерны siv1987, LEOnidUKG перестанут работать, а мой продолжит получать данные без каких либо изменений в паттерне

dspu
На сайте с 10.05.2006
Offline
268
#5

спасибо всем, проблема была зарыта в разных результатах гугл для браузера и для file_get_contents

правильная строка "Advanced search</a></div><div>156 results</div></div>"

работает по:

'@Advanced search<\/a><\/div><div>(.*?) results@smi'
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#6
Rulin:
, то паттерны siv1987, LEOnidUKG перестанут работать, а мой продолжит получать данные без каких либо изменений в паттерне

Ой да ладно :)

Ну давайте так:

preg_match('@<div id=resultStats.*?>(.*?) @smi',$text,$col);

И всё, будет работать.

Rulin
На сайте с 16.01.2008
Offline
143
#7
LEOnidUKG:
Ой да ладно :)
Ну давайте так:

preg_match('@<div id=resultStats.*?>(.*?) @smi',$text,$col);

И всё, будет работать.

Будешь каждый день проверять, работает ли твой код?

Я привык, один раз качественно написал, работает всегда!

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#8
Rulin:
Будешь каждый день проверять, работает ли твой код?
Я привык, один раз качественно написал, работает всегда!

Почему это мой код не будет работать, а твой будет а? Не будь так уверен.

dspu
На сайте с 10.05.2006
Offline
268
#9

ситуация осложнилась, иногда гугл вставляет "About" перед числом:

"Advanced search</a></div><div>About 156 results</div></div>"

его можно откинуть паттерном или надо писать код для анализа получившихся данных?

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#10

str_replace слова About перед регуляркой :)

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий