Кто силен в регулярных выражениях

(Ответов: 17, Просмотров: 1073)
Страница 1 из 2 12 Последняя
  1. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Добрый день, есть html код в переменной $a


    Код HTML:
      $a = '<td><a href="http://sait.ru/">текст текст</a></td> <td>4302</td> <td><a href="http://sait2.ru/">текст текст</a></td> <td>4300</td></tr>
    ';
    Как на регулярке вытащить число 4300? ключевым моментом является то что мы знаем что число идет после ссылки sait2.ru в тегах <td></td>
    • 0
  2. Sunshine reggae Аватар для OKyJIucT
    • Регистрация: 02.09.2011
    • Сообщений: 3,240
    • Репутация: 1830
    • Webmoney BL: ?
    Bposter, я бы на вашем месте воспользовался библиотекой HTML Dom - она просто в использовании и выполнение вашей задачи отнимет буквально 2-3 строки кода. На Хабре есть неплохое описание работы.
    • 1

    Спасибо сказали:

    Bposter(27.10.2013),
  3. Гуру Аватар для akrustam
    • Регистрация: 21.05.2010
    • Сообщений: 1,161
    • Репутация: 285
    • Webmoney BL: ?
    Полезная штука html dom. А тс-у просто перебор по условию, что есть только цифры. Но регулярке, если не забыл вот так ("/(\d+)/i")
    • 0
  4. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Bposter,
    Примерно так:
    /<\s+href=\"\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/
    Смысл: вначале идет ваша ссылка (точки, кавычки, косые черты экранируем с помощью \), затем идет произвольное количество любых символов .*?, затем тег <td>, возможно произвольное число пробельных символов \s*, цепочка цифр, произвольное число пробельных символов, </td>. Вопросительный знак в .*? означает, что поиск нужно ограничить поиск минимумом (а не искать до последней цепочки цифр в тексте). Но имейте в виду, что если после вашей ссылки все же не будет цепочки цифры внутри <td>...</td>, то регулярка будет искать по всему имеющемуся тексту, пока не отыщет аналогичную цепочку цифр внутри <td>...</td> где-нибудь потом.
    • 1

    Спасибо сказали:

    Bposter(27.10.2013),
  5. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Пустой массив выдает

    PHP код:
        $mathes = array();
        
    preg_match_all('/<\s+href=\"\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/'$a$mathes);
        
        
    print_r($mathes); 
    • 0
  6. Sapienti sat Аватар для brainix
    • Регистрация: 01.01.2013
    • Сообщений: 1,925
    • Записей в дневнике: 1
    • Репутация: 817
    • Webmoney BL: ?
    При парсе не заморачиваюсь с регулярками, быстро забываю как ими пользоваться. Иду внаглую разбирать текст.

    Цитата Сообщение от Bposter Посмотреть сообщение
    ключевым моментом является то, что мы знаем что число идет после ссылки sait2.ru в тегах <td></td>
    Из примера будут коменты:
    PHP код:
        $r2=explode('sait2.ru',$a);//разбили и во 2 элементе /">текст текст</a></td> <td>4300</td></tr>
        
    $r3=explode('<td>',$r2[1]);//разбили и во 2 элементе 4300</td></tr>
        
    $r4=explode('</td>',$r3[1]);//разбили и в 1 элементе 4300
        
    $chislo=r4[0]; 
    Конечно если это личная страница, а не общественная. Вполне что работать будет чуть дольше чем регулярки, но по крайней мере не надо заморачиваться в синтаксисе.
    • 0
  7. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    brainix, Дело в том что там не две таблицы, и ссылок много разных, это если бы я получил бы тока две строки тогда да а так такой вариант не подходит.
    • 0
  8. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Bposter,
    Я сказал "примерно" :) и постарался объяснить принципы. Даже у меня редко получается, что регулярка сразу работает без отладки. Я нечаянно пропустил тег a и слово http:. Вот так работает:

    $a = '<td><a href="http://sait.ru/">текст текст</a></td> <td>4302</td> <td><a href="http://sait2.ru/">текст текст</a></td> <td>4300</td></tr>';
    $matches = array();
    preg_match_all('/<a\s+href=\"http:\/\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/', $a, $matches);

    for ($k = 0; $k < count($matches); $k++)
    for ($i = 0; $i < count($matches[$k]); $i++) {
    print($k.",".$i . ": " . $matches[$k][$i] . "\n");
    }
    • 0
  9. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Ясно спасибо теперь все пашет :)
    • 0
  10. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Пожалуйста. Обращайтесь :)
    • 0
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
Вопрос к знатокам регулярных выражений - как прописать фразу-исключение
Поисковые системы 4 15.12.2012 17:29
Бесплатный тестер регулярных выражений
Софт, скрипты, сервисы 0 21.09.2012 13:54

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры