Запутался с регулярками

Discussion in 'PHP' started by serg-php, 16 Jul 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Хочу сделать urls статическими изначально имеющие вид

    index.php?page=browse&off=1
    index.php?page=browse&off=2

    и находящиеся в массиве

    <div id="pagenav" class="pageNav" align="center"><b>1 &nbsp;<a href="/index.php?page=browse&off=1">2</a> &nbsp;<a href="/index.php?page=browse&off=2">3</a> &nbsp;<a href="/index.php?page=browse&off=3">4</a> &nbsp;<a href="/index.php?page=browse&off=4">5</a> &nbsp;<a href="/index.php?page=browse&off=5">6</a> &nbsp;<a href="/index.php?page=browse&off=6">7</a> &nbsp;<a href="/index.php?page=browse&off=7">8</a> &nbsp;<a href="/index.php?page=browse&off=8">9</a> &nbsp;<a href="/index.php?page=browse&off=9">10</a> &nbsp;<a href="/index.php?page=browse&off=1">&gt;</a> &nbsp<a href="/index.php?page=browse&off=10">&gt;&gt;</a> &nbsp</b></div>



    Цель - на выходе получить

    player-1.html
    player-2.html



    $url= preg_replace("'index(.+?)page=browse&off='", "player-", $url);

    echo $url; выводит player-1, player-2

    А как мне добавить .html к $url ?

    Насколько быстродейственный метод через preg_replace ?
     
  2. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    $url .= '.html' ?
     
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    miako,

    да так бы и сделал только не знаю как добавить .html

    $url ведь равен

     
  4. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Что-то я не понимаю. Ты же написал что:
     
  5. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Выводит

     
  6. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Используй ссылки в replacement:
    $url = preg_replace("#index(.+?)page=browse&off=(\d+)#", "player-$2.html", $url);
     
  7. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Да и первая маска тебе зачем? Экранируй точку и вопрос.
     
  8. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    miako, Гениально!
    Все получилось!
     
  9. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0

    Экранировать слешем?
     
  10. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Слешем.
     
  11. boxflip0

    boxflip0 New Member

    Joined:
    14 May 2011
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Используй xml библиотеки для этих целей. Парсить html регулярками это извращение.
     
  12. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    boxflip0,

    скриптец самописный и там были примеры замен, поэтому сделал по аналогии.

    Чем это удобнее?

    Сделал так

    $url = preg_replace("#index\.php\?page=browse&off=(\d+)#", "player-$2.html", $url);

    Результат - везде player-.html без цифры.

    Я, что неправильно єкранирую?
     
  13. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    PHP:
    $url preg_replace("#index\.php\?page=browse&off=(\d+)#si""player-$1.html"$url);
     
    #13 spamoney, 17 Jul 2011
    Last edited: 17 Jul 2011
  14. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    spamoney, благодарю!
    Работает!
     
  15. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    what?
     
  16. boxflip0

    boxflip0 New Member

    Joined:
    14 May 2011
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
  17. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Небольшое замечание - у меня не xml-файл, а переменная в которой занесены ссылки навигации по сайту.
     
  18. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Я так понимаю речь идет о использовании XPath вместо регулярок (зачем было писать столько воды?).
    Так вот, XPath расчитан на валидный xml или xhtml. Много знаете сайтов с полностью валидным кодом?
    Проблему частично может решить tidy, но это тоже накладывает определенные проблемы.
     
  19. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Да и вообще, XPath предназначен для поиска информации, а не для замены.
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Предупреждение

    serg-php дни сменяются неделями, недели месяцами, а вы продолжаете игнорировать правила раздела. Первое предупреждение.

    miako речь идет об использовании XML парсеров для взаимодействия с HTML документами. XPath - это лишь метод доступа к полям XML. И теперь задачка - как по вашему происходит разбор HTML документа в браузере
     
    _________________________