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

Тема в разделе "Регулярные выражения", создана пользователем dmsoh, 12 сен 2010.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. dmsoh

    dmsoh

    Регистр.:
    27 янв 2007
    Сообщения:
    192
    Симпатии:
    42
    Не получается разобраться, почему регулярное выражение выдает меньше на 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.
     
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    опечатки в названии переменной нет?
     
  3. dmsoh

    dmsoh

    Регистр.:
    27 янв 2007
    Сообщения:
    192
    Симпатии:
    42
    Подправил название переменной. Вопрос остается открытым.
     
  4. Google.com

    Google.com Читатель

    Заблокирован
    Регистр.:
    16 фев 2010
    Сообщения:
    250
    Симпатии:
    295
    а если так?
    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>";
    }
     
    dmsoh нравится это.
  5. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    284
    Симпатии:
    47
    Здесь ошибка может быть только в паттерне регулярке.
    Возьми RegExBuddy, вставь туда дамп страницы и регулярку и проверь.
     
    dmsoh нравится это.
  6. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    в заголовке цикла имя переменной была по прежнему не было исправлено. если исправить все имена, будет выдавать ровно пять наименований. программируем внимательнее.

    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>";
    }
     
    dmsoh нравится это.
  7. bobbig

    bobbig Создатель

    Регистр.:
    14 ноя 2007
    Сообщения:
    34
    Симпатии:
    5
    есть еще вариант перебора массива, имхо лучше:
    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...
     
  8. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    пхп такие ошибки выводит только если уровень вывода ошибок E_ALL, но по умолчанию обычно стоит E_ALL &~ E_NOTICE
     
  9. bobbig

    bobbig Создатель

    Регистр.:
    14 ноя 2007
    Сообщения:
    34
    Симпатии:
    5
    имелось в виду, каким образом могло получиться именно это "Выдает 4 категории, а их 5."?
    По сути, скрипт ничего не должен был выдать кроме ошибки, если их вывод как вы правильно говорите включен.
     
  10. makcim

    makcim Писатель

    Регистр.:
    6 сен 2007
    Сообщения:
    4
    Симпатии:
    0
    Помогите пожалуйста с таким выражением

    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 . Работает, но нифига не понимаю что это значит. Может кто-то объяснить?
     
Статус темы:
Закрыта.