Помогите составить регулярное выражение

Тема в разделе "PHP", создана пользователем dump1111, 27 апр 2010.

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

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Подскажите как составить регулярное выражение, чтобы вытащить из кода последние три слова:
    Код:
    <h3>Past tense</h3>
    <table border=1>
    <tr>
    <th align=left>Masculine</th>
    
    <th align=left>Feminine</th>
    <th align=left>Neutral</th>
    <th align=left>Plural</th>
    </tr>
    <tr>
    <td align=left>бе'гал</td>
    <td align=left>бе'гала</td>
    <td align=left>бе'гало</td>
    <td align=left>бе'гали</td>
    </tr>
    
    </table>
    
    Вот чтобы вытащить слова бе'гал,бе'гала, бе'гало.
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    $data - это твоя таблица
    PHP:
    preg_match_all("!<td align=left>(.+)</td>!",$data,$m,PREG_PATTERN_ORDER);
    в массиве $m[1] будут находиться все найденные совпадения, последние 3 можешь вытянуть оттуда через array_pop
     
    dump1111 нравится это.
  3. Dima Kos

    Dima Kos Постоялец

    Регистр.:
    1 апр 2010
    Сообщения:
    54
    Симпатии:
    6
    или через цикл FOR
    PHP:
    $num_array=count($m[1]);//узнаем количество элементов массива
    for ($i==$num_array-3;$i<=$num_array;$i++)
    {print 
    $m[1][$i];}
    вроде так))
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    или еще через сотню способов. чем твой вариант оптимальнее в рамках данной задачи, когда известно количество элементов?
     
  5. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Кстати, я попробовал через функцию array_shift, так она выводит сообщение об ошибке, что $noun shold be an array:
    PHP:
    preg_match_all("!<td align=left>(.+)</td>!",$content,$noun,PREG_PATTERN_ORDER);
    for (
    $i=0;$i<=4;$i++)
    {
    $dative=array_shift($noun[1][$i]);
    }
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    функция array_shift извлекает первый элемент из массива, так зачем ты в цикле номер элемента указываешь? по-твоему в массиве может быть $i-первых элементов?
     
  7. DorjeCash

    DorjeCash Создатель

    Регистр.:
    18 апр 2008
    Сообщения:
    24
    Симпатии:
    8
    массив двухмерный. вот цитата из доки пхп:
    во втором элементе массива (1 - это второй элемент в С-нотации) будет массив полученных результатов (т.е. именно то что нужно ТС-у), а в первом - полные строки всего выражения.
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    ты самый умный тут чтоли?

    $noun[1] - массив
    $noun[1][$i] - не массив
     
  9. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Во тпро это можно по-подробнее?
     
  10. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Это значение массива. Для array_shift тебе нужно использовать $noun[1]
     
    dump1111 нравится это.
Статус темы:
Закрыта.