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

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

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

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

    Joined:
    9 Mar 2008
    Messages:
    174
    Likes Received:
    93
    Reputations:
    0
    я не профан в регулярках но думаю что мона и так:
    PHP:
    <?php
    $text 
    '
     <h2> 
                <a href="/News/Detail/id/325474/cat/66/" > 
                    Почему опустели офисы?</a>            </h2>'
    ;

    preg_match('~<h2>.*<a href="(.*)" >~sUiS',$text,$reg);
    echo 
    $reg['1'];
    ?>
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Zircool,
    PHP:
    <?php
    $a 
    '<h2>
                <a href="/News/Detail/id/325474/cat/66/" >
                    Почему опустели офисы?</a>            </h2> '
    ;
    preg_match('#<h2>.*<a.?href="(.*?)".*>.*</a>.*</h2>#'$a$b);
    print_r($b);
    ?>
     
    #122 banned, 18 Dec 2008
    Last edited: 18 Dec 2008
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $in=
    '<h2>
    <a href="/News/Detail/id/325474/cat/66/" >
    Почему опустели офисы?</a>
    </h2> '
    ;

    if (
    preg_match_all('/<h2>(.*)<\/h2>/s'$in$result)) 
    echo 
    $result[1][0]; else echo 'Нету такого';
    ?>
     
  4. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    $name = '{TITLE}';
    $value = 'Заголовок';
    $file = preg_replace('|\{$name\}|i',$value,$file,-1);
    Что в регулярке неправильно составил?

    п.с. строковые не советовать, и так строковую использую:
    $file = str_replace('{'.$name.'}',$value,$file);
    просто хочу и с этой регуляркой разобраться
     
  5. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    PHP:
    $name '{TITLE}';
    $value 'Заголовок';
    $file preg_replace("|$name|i"$value$file);
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $name '{TITLE}'
    $value 'Заголовок'
    echo 
    preg_replace($name$value$name);
    ?>
     
    1 person likes this.
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ru}{eeZ Всяко лучше строковая функция, но если уж так хочется, то чтобы регулярка интерпретировала переменную как текст, нужно использовать preg_quote
    PHP:
    $name '{TITLE}';
    $value 'Заголовок';
    $file preg_replace('|'.preg_quote($name).'|i',$value,$file);
     
    _________________________
  8. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    а если так:
    $file = 'кимек иек итек кет кт д.дж.{TITLE} v,lvfrl r rv {HEADER} vvvv';
    $name = 'TITLE';
    $value = 'Заголовок';
    $file = preg_replace('|\{$name\}|i',$value,$file,-1);

    мне же надо именно между фигурными скобками
     
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $file 'sdlfgsdlgldsgh ssdflksdjf {TITLE} v,lvfrl r rv {HEADER} vvv';
    $name 'TITLE';
    $value 'Заголовок';
    $file preg_replace('{'.$name.'}'$value$file);
    echo 
    $file;
    ?>
     
  10. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    Переменные не подставляются в одинарных кавычках!

    нужно:
    $file = preg_replace("|\{$name\}|i",$value,$file);

    незачем писать -1 в четвертый параметр функции preg_replace

     
    2 people like this.
  11. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    ппц, тупанул когда писал. не думал, что переменную повешу. Вообще забыл и ещё парился чё я типа не так делаю =\
    Спасибо
     
  12. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    прошу помощи. нужен парсер новостей http://primamedia.ru/export/main.htm (или в тхт http://primamedia.ru/export/main.txt)
    чтобы я мог повставлять в таблицы отдельно - дату, новость etc
    синтаксис прегматча оказался для меня очень сложен (
    заранее благодарю
     
  13. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    PHP:
    <?php
    //новости получаем из main.htm в переменную $news

    //парсим
    preg_match_all("/pm_newsdate'>(.+)\.<\/span>\t<a href='(.+)'>(.+)<\/a>\t<div class='pm_newsdesc'>(.+)<\/div>/isU"$news$m);

    /*
    Результат:
    $m[1] - дата и время новостей
    $m[2] - ссылка на полный текст новости
    $m[3] - заголовок новости
    $m[4] - краткое описание новости
    */
    print_r($m);
    ?>
     
    2 people like this.
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну а может уточним задание и будет тогда <form action="любой текст">

    или я не прав???
     
    1 person likes this.
  15. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    PHP:
    $text preg_replace('/action="[^"]*"/','action="my.php"',$text);
     
    1 person likes this.
  16. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $text '<form action = "kfk">';
    $text preg_replace('/action.*=.*"[^"]*"/','action="my.php"',$text); 
    //дальше просто смотри исходники получившейся страницы, чтобы проверить результат
    ?>
     
    #136 Pashkela, 28 Dec 2008
    Last edited: 28 Dec 2008
  17. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Лучше так:
    PHP:
     $text preg_replace('/action[\s\S]=[\s\S]"[^"]*"/','action="my.php"',$text); 

    UPD:
    Хотя нет, лучше вот так:
    PHP:
    $text preg_replace('#action[\s]?=[\s]?"[^"]*"#''action="my.php"'$text);
     
    #137 .:EnoT:., 28 Dec 2008
    Last edited: 28 Dec 2008
    2 people like this.
  18. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    PHP:
    <pre>
    <?

    $text = <<<markup

    <form action=http://example.com></form>
    <form action="http://example.com"></form>
    <form action='http://example.com'></form>

    <form action  =  "http://example.com"></form>
    <form action    ="http://example.com"></form>
    <form action=    "http://example.com"></form>

    markup;

    $pattern = <<<regexp
    ~action\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)~
    regexp;

    $text = preg_replace($pattern, 'action="my.php"', $text);

    echo htmlspecialchars($text);

    ?>
    </pre>
     
  19. ICD2

    ICD2 Member

    Joined:
    28 Dec 2008
    Messages:
    26
    Likes Received:
    14
    Reputations:
    3
    Помогите разобраться пожалуйста, имеется вот такой конфиг -
    Code:
    root@newsystems:~# cat /var/www/.htaccess 
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !php
    
    RewriteRule ^about$ index.php?action=about [L]
    RewriteRule ^tools$ index.php?action=tools [L]
    RewriteRule ^register$ index.php?action=register [L]
    RewriteRule ^myuploads$ index.php?action=myuploads [L]
    RewriteRule ^thread$ thread.php [L]
    RewriteRule ^feedback$ feedback.php [L]
    
    RewriteRule ^thread/([0-9]+)/?$ thread.php?id=$1 [NC]
    RewriteRule ^thread/([0-9]+)/([0-9]+)/?$ thread.php?id=$1&num=$2 [NC] 
    последние 2 строки не рабочие =/ как сделать правильно?
     
  20. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    ICD2, есть SSH доступ к серверу?
     
Thread Status:
Not open for further replies.