[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Мне надо чтобы в одном было и ник и текст а не отдельно.
     
  2. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    preg_match('#<from nick="(.*)" race_id="(.+)" rank=".+" cln=".+" avatar=".*"/>\r\n<to/>\r\n<text>\r\n.*\r\n</text>#',$result,$nick);
    print_r($nick);
     
  3. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    К сожалению не пашет.
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Rastamanka Значит "как нибудь сами разберетесь?" (c)
    PHP:
    preg_match_all('~<from nick="([^"]+)"[\s\S]*?<text>([\s\S]+?)</text>~msi'$text$result);
    var_dump($result);
     
    _________________________
  5. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Подскажите пожалуйста как можно составить регулярное выражение. Нужно удалить все теги от первого до последнего, как это можно сделать правильно.

    пример кода

    <div id="basketov"><!-- первый тег -->
    <table border='0' cellpadding="0" cellspacing="0" id="basket-table">
    <tr>
    <td id="left-basket"></td>
    <td id="bg-basket">
    <div id="itm-basket">
    <span>корзина_1</span>
    <table class="table-basket-line" border="0">
    <tr>
    <td><div class="basket-line-basket"></div></td>
    <td class="tdbasknax">корзина_2</td>
    </tr>
    </table>
    </div>
    </td>
    </tr>
    </table>
    </div><!-- последний тег -->

    сейчас делаю вот так

    PHP:
    $result preg_replace('/<div id="basketov">.*?<\/div>.*?<\/div>.*?<\/div>/is'''$text);
    правильно ли я делаю запись регулярного выражения или можно как то сократить последние 3 тега <\/div>
     
    #1225 NAH, 1 Aug 2010
    Last edited: 1 Aug 2010
  6. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    <\/div>{3}
     
  7. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    зачем?
    strip_tags хватит
     
  8. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Я не правильно выразил мыль, написал (Нужно удалить все теги от первого до последнего)
    А нужно было написать (Нужно удалить все что в ну три тегов от первого до последнего)
    + сами теги первый (открывающийся <div id="basketov">) и последний (закрывающийся </div>)
     
    #1228 NAH, 1 Aug 2010
    Last edited: 1 Aug 2010
  9. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    PHP:
    $result preg_replace('/<div id="basketov">.*?<\/div>{3}/is'''$text);
    это не работает
     
  10. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Можно как нибудь найти закрывающий тег, а не тот тег который встретился первым.
    То есть есть код

    <div id="basketov"><!-- первый тег -->
    <table border='0' cellpadding="0" cellspacing="0" id="basket-table">
    <tr>
    <td id="left-basket"></td>
    <td id="bg-basket">
    <div id="itm-basket">
    <span>корзина_1</span>
    <table class="table-basket-line" border="0">
    <tr>
    <td><div class="basket-line-basket"></div></td>
    <td class="tdbasknax">корзина_2</td>
    </tr>
    </table>
    </div>
    </td>
    </tr>
    </table>
    </div><!-- последний тег -->

    когда я пишу
    PHP:
    $result preg_replace('/<div id="basketov">.*?<\/div>/is'''$text); 
    то результат срезки такой

    <div id="basketov"><!-- первый тег -->
    <table border='0' cellpadding="0" cellspacing="0" id="basket-table">
    <tr>
    <td id="left-basket"></td>
    <td id="bg-basket">
    <div id="itm-basket">
    <span>корзина_1</span>
    <table class="table-basket-line" border="0">
    <tr>
    <td><div class="basket-line-basket"></div>

    по регулярному выражению происходит срезка не закрывающего тега а первого встречающегося на пути

    Приходится писать вот так чтобы найти закрывающийся тег

    PHP:
    $result preg_replace('/<div id="basketov">.*?<\/div>.*?<\/div>.*?<\/div>/is'''$text);
    А если будет 10- 20 закрывающий тегов придётся писать 20 раз .*?<\/div>
    Вопрос: как можно найти закрывающийся тег.
     
    #1230 NAH, 1 Aug 2010
    Last edited: 1 Aug 2010
  11. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    preg_replace('/^<div id="basketov">.*?<\/div>$/is', '', $text);
    поставь ^ и $ чтобы обозначить границы
     
  12. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    Помогите написать выражение. Условия -
    строка должна состоять из 8-10 символов
    в ней должна содержаться одна или больше [a-z]
    в ней должна содержаться одна или больше [A-Z]
    в ней должна содержаться одна или больше [0-9]
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Darth Padla одной регуляркой это будет медленно
     
    _________________________
  14. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    "#[a-zA-z0-9]{8,10}#"
     
  15. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
     '#[a-z0-9]{8,10}#i'
     
  16. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    К сожалению код не работает.
    Попробовал вот на этом коде.

    $content = '<div id="container">
    <div id="header">
    <div id="basketov">
    <table border="0" cellpadding="0" cellspacing="0" id="basket-table">
    <tr>
    <td id="left-basket"></td>
    <td id="bg-basket">
    <div id="itm-basket">
    <span>корзина_1</span>
    <table class="table-basket-line" border="0">
    <tr>
    <td><div class="basket-line-basket"></div></td>
    <td class="tdbasknax">корзина_2</td>
    </tr>
    </table>
    </div>
    </td>
    </tr>
    </table>
    </div>
    <div>
    <a id="mobile_link" href="/about/?mobile=Y">Мобильная версия</a></br>
    </div>
    <div id="subtopmenu">
    <div class="left-menu">';

    PHP:
    $content preg_replace('/^<div id="basketov">.*?<\/div>$/is'''$content);
    echo $content;
     
    #1236 NAH, 1 Aug 2010
    Last edited: 2 Aug 2010
  17. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    Поставь еще m, это многострочный поиск
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SHiNiGaMi, Compton посмотрите внимательно на условие Darth Padla - требуется, чтобы в пароле встречались и большие буквы, и малые, и цифры - одновременно. Ваша регулярка не обеспечивает этого

    NAH в данном случае лучше написать длинную регулярку, включающую последовательно все внутренние дивы
     
    _________________________
  19. NAH

    NAH New Member

    Joined:
    31 Jul 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    C м тоже не работает, вообще ничего не происходит.

    $content = '<div id="container">
    <div id="header">

    <div id="basketov"><!-- первый тег вырезать от сюда -->
    <table border="0" cellpadding="0" cellspacing="0" id="basket-table">
    <tr>
    <td id="left-basket"></td>
    <td id="bg-basket">
    <div id="itm-basket">
    <span>корзина_1</span>
    <table class="table-basket-line" border="0">
    <tr>
    <td><div class="basket-line-basket"></div></td>
    <td class="tdbasknax">корзина_2</td>
    </tr>
    </table>
    </div>
    </td>
    </tr>
    </table>
    </div><!-- последний тег вырезать до сюда -->

    <div>
    <a id="mobile_link" href="/about/?mobile=Y">Мобильная версия</a></br>
    </div>
    <div id="subtopmenu">
    <div class="left-menu">';

    PHP:
    $content preg_replace('/^<div id="basketov">.*?<\/div>$/ims'''$content);
    echo $content;
     
    #1239 NAH, 2 Aug 2010
    Last edited: 2 Aug 2010
  20. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    $content preg_replace('/^<div id="basketov">.*?<\/div>{3}$/ims'''$content);
    даже так?=\
     
Thread Status:
Not open for further replies.