Помогите с регуляркой

Статус
В этой теме нельзя размещать новые ответы.

dmsoh

Профессор
Регистрация
27 Янв 2007
Сообщения
192
Реакции
44
Не получается разобраться, почему регулярное выражение выдает меньше на 1 результат чем на странице.

Код:
$html = file_get_contents("http://www.ru.all-biz.info/buy/goods/?rubric=1103");

preg_match_all('/category=\d{1,}[\'"]>(.*?)<\/a>/', $html, $rlt);

for ($p=0; $p<count($rlt1[0]); $p++) 
{
echo $rlt[1][$p]."<br>";
}

Выдает 4 категории, а их 5.
 
  • Заблокирован
  • #4
а если так?
PHP:
$html = file_get_contents("http://www.ru.all-biz.info/buy/goods/?rubric=1103");
preg_match_all('/category=(.*?)\"/', $html, $rlt);
for ($p=0; $p<count($rlt[1]); $p++) 
{
echo $rlt[1][$p]."<br>";
}
 
Здесь ошибка может быть только в паттерне регулярке.
Возьми RegExBuddy, вставь туда дамп страницы и регулярку и проверь.
 
Подправил название переменной. Вопрос остается открытым.

в заголовке цикла имя переменной была по прежнему не было исправлено. если исправить все имена, будет выдавать ровно пять наименований. программируем внимательнее.

PHP:
$html = file_get_contents("http://www.ru.all-biz.info/buy/goods/?rubric=1103");
preg_match_all('/category=\d{1,}[\'"]>(.*?)<\/a>/', $html, $rlt);
for ($p=0; $p<count($rlt[0]); $p++) 
{
echo $rlt[1][$p]."<br>";
}
 
есть еще вариант перебора массива, имхо лучше:
PHP:
$html = file_get_contents("http://www.ru.all-biz.info/buy/goods/?rubric=1103");
preg_match_all('/category=\d{1,}[\'"]>(.*?)<\/a>/', $html, $rlt);
foreach ( $rlt[1] as $a )
 {
  echo $a.'<br>'; 
 }
p.s. причина действительно не в регулярке, еще странно то, что скрипт в первом топике вообще ничего не должен был вывести кроме ошибки Undefined variable: rlt1 in...
 
p.s. причина действительно не в регулярке, еще странно то, что скрипт в первом топике вообще ничего не должен был вывести кроме ошибки Undefined variable: rlt1 in...

пхп такие ошибки выводит только если уровень вывода ошибок E_ALL, но по умолчанию обычно стоит E_ALL &~ E_NOTICE
 
имелось в виду, каким образом могло получиться именно это "Выдает 4 категории, а их 5."?
По сути, скрипт ничего не должен был выдать кроме ошибки, если их вывод как вы правильно говорите включен.
 
Помогите пожалуйста с таким выражением

PHP:
'/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))\b($name)\b/imsU';


Это выражение не учитывает кириллицу. Как его переделать?
Есть вариант заменить \b($name)\b/imsU на \PL($name)\PL/iu
Вроде начинает учитывать русские символы, но глючит. Не понимаю как прочитать это выражение

---------- Post added at 15:56 ---------- Previous post was at 14:16 ----------

Вот решил проблему так (?<!\p{L})($name)(?!\p{L})/msU . Работает, но нифига не понимаю что это значит. Может кто-то объяснить?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху