За последние 24 часа нас посетили 21498 программистов и 1698 роботов. Сейчас ищут 1939 программистов ...

Искать все пока не встретит подстроку "</p>"

Тема в разделе "Регулярные выражения", создана пользователем Elephant, 6 июл 2009.

  1. Elephant

    Elephant Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    8
    Симпатии:
    0
    Необхомо найти все пока не встретится "</p>". Я много раз писал регулярки, например, искал все пока не встретится "}". С одним символом все понятно, а как быть если у меня слово ("</p>")?
    Неуверен что регулярки вообще это позволяют...
     
  2. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    регулярки позволяют и очень легко, но тебе достаточно сделать следующее:

    $newStr = substr($oldStr, 0, strpos($oldStr, '</p>'));
     
  3. Elephant

    Elephant Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    8
    Симпатии:
    0
    Инструментами языка это просто, меня интересует именно регулярка, поскольку в базе будет хранится текст и регулярка, которая его обрабатывает. Нужна одна строка
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    PHP:
    1. <?php
    2. $str = 'some <p> text is </p> here';
    3. preg_match ('#(.*?)</p>#', $str, $m);
    4. // $m[0] => some <p> text is </p>
    5. // $m[1] => some <p> text is
    6. ?>
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?
    2.  
    3. preg_match('|(.+?) (?= (?:</p>) )|sx', $string, $match);
    4.  
    5. ?>
     
  6. Elephant

    Elephant Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    8
    Симпатии:
    0
    Спасибо. Работает.

    Но есть еще одна проблема, такие регулярки по какой-то причине ничего не метчат если строка на которую должен заканчиваться текст местит пробел, например

    PHP:
    1.  
    2. <?
    3. preg_match ('#(.*?)</p><div class="foo">#', $str, $m);
    4. ?>
    5.  
     
  7. Elephant

    Elephant Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    8
    Симпатии:
    0
    Все. Всем спасибо, решил таким образом:

    PHP:
    1.  
    2. <?
    3. preg_match ('/button.js"><\/script>\s+<\/div>(.*?)\s+<div class="sociable"/s', $str, $m);
    4. ?>
    5.  
    то есть "s" в конце - решающий.
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Elephant
    Смените или удалите, пожалуйста, аватару. Разрешены только личные фотографии.

    З.ы
    Вспомнилось — до первой звезды :)
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    верните подписи =((