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

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

Thread Status:
Not open for further replies.
  1. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    #Wolf#

    1.
    PHP:
    if(preg_match('/^[\w\d]+$/',$var)) echo 'good';
    2.
    PHP:
    if(preg_match('/^[^<>?]+$/',$var2)) echo 'good';
     
  2. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Не работает :(

    Нашёл вот такую штуку для .htaccess
    PHP:
    Options +FollowSymlinks
    RewriteEngine on
    rewritecond 
    %{http_host} ^domain.com [nc]
    rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc] 
    Как мне её переделать под себя?

    P.s. Нужно редиректить с [DOMEN]/index.html на [DOMEN]/

    Заранее благодарен! :)
     
  3. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Ну что? С этим никто не может помочь? :(
     
  4. dinar_007

    dinar_007 Мадемуазель

    Joined:
    18 Jan 2005
    Messages:
    1,019
    Likes Received:
    770
    Reputations:
    97
    PHP:
    RewriteRule ^(.*)\.html$ /$1\.php
     
    1 person likes this.
  5. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    mod_rewrite

    Вообщем проблема такая - нужно переопределить запросы к папке /data/ на запросы в /docs/_private/
    Скрипты - любые, параметры - разные, папка /data/ не сушествует ..
    В голову приходит только RewriteRule ^data/([^/]+)$ /docs/_private/$1
     
  6. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Не пашет =\
    ----
    Пойду спать, завтра на свежую голову подумаю ..
     
    #246 BlackSun, 26 Feb 2009
    Last edited: 26 Feb 2009
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    BlackSun
    Code:
    RewriteCond %{REQUEST_URI} ^/data
    RewriteRule ^data/(.+) /docs/_private/$1 [L] 
     
    _________________________
    1 person likes this.
  8. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Можно проще: strip_tags($str)
     
  9. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Запарился с регуляркой...
    Есть страница, парситься в file_get_contents
    там есть несколько дивов.
    Code:
    <!-- \\vulnerabilities\\ -->
    						<div class="postblock1">
    			<h4><a class="medium" href="ability/369157.php">Все что угодно</a></h4>
    			<p>Все что угодно.</p>
    			<div class="post-info">
    											28 февраля, 2009 (просмотров: 3)
    			</div>
    		</div>
    		<!-- //vulnerabilities// -->
    
    поймать нужно весь див что между <!-- \\vulnerabilities\\ --> и <!-- //vulnerabilities// -->
    Заранее спасибо.
     
  10. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    Как бы так вроде:
    PHP:
    <?php
    $html
    =<<<HTML
    блаблаблаблаблаблаблаблаблаблаблабла
    <!-- \\vulnerabilities\\ -->
                            <div class="postblock1">
                <h4><a class="medium" href="ability/369157.php">Все что угодно</a></h4>
                <p>Все что угодно.</p>
                <div class="post-info">
                                                28 февраля, 2009 (просмотров: 3)
                </div>
            </div>
            <!-- //vulnerabilities// -->
      блаблаблаблаблаблаблаблаблаблаблабла
    блаблаблаблаблаблаблаблаблаблаблабла<>
    HTML;
    preg_match('#<!-- \\\vulnerabilities\\\ -->(.*)<!-- //vulnerabilities// -->#sU',$html,$gatcha);
    print_r($gatcha);
    preg_match('#<div class="postblock1">(.*)</div>#sU',$html,$gatcha);
    print_r($gatcha);
    ?>
     
    #250 AkyHa_MaTaTa, 28 Feb 2009
    Last edited: 28 Feb 2009
    1 person likes this.
  11. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Спасиб, тока вот косяк их много а суеться только один... Кто нить толкнет на мысль как их все взять?
    по строкам искать нельзя вроде как, они ведь много строчные...
    туплю немного, болею счас...:(
     
    1 person likes this.
  12. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    preg_match_all
     
    #252 AkyHa_MaTaTa, 28 Feb 2009
    Last edited: 1 Mar 2009
    1 person likes this.
  13. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    ппц. ненавижу эти регулярки уже. вроде все просто.
    Code:
    preg_replace('#<a href="(.*)">(.*)</a>#sU',"$1","<a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>");
    
    но не хочет работать. :(
    нужно www.opera.com
    Кто нить вкурсе почему не канает?
     
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    $b 'новое_название_ссылки';
    echo 
    preg_replace('|>.*</a>|','>' $b '</a>','<a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>');
    а у тебя там просто путаница с кавычками, в последнем параметре, двойные в двойных
     
    #254 Pashkela, 3 Mar 2009
    Last edited: 3 Mar 2009
    2 people like this.
  15. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    это я когда в форум вставлял напутал, вообще то там переменная
    preg_replace('#<a href="(.*)">(.*)</a>#sU',"$1",$e);
    вот так в оригинале.
    твой вариант не особо в тему т.к. новое название я должен вытащить из старого. то есть из
    <a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>
    должно получиться www.opera.com

    Вообще особенно интересует почему мой вариант не работает. :(
     
  16. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Дык если просто вытащить надо, то зачем использовать preg_replace() когда есть preg_match() ?

    PHP:

    $a 
    '<a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>';
    preg_match('#>([^<]*)</a>#s'$a$out);
    echo 
    $out[1];


    Потому что не объявлена переменная $1 и путаница с кавычками (как сказано выше)
     
    1 person likes this.
  17. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Нужно не просто вытащить а в тексте заменить.
    бла бла бла
    <a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>
    бла бла бла

    из этого нужно что бы получилось.
    бла бла бла
    www.opera.com
    бла бла бла

    там же двойные кавычки внутри одинарных. они вроде как не должны интерпретитьроваться.... ?
    например
    Code:
    $reg='#<div class="postblock1">(.*)</div>#sU';
    preg_match_all($reg,$res,$result);
    прекрасно работает.

    Enot, твоя регулярка тоже не цепляет... :(
     
    #257 blaga, 3 Mar 2009
    Last edited: 3 Mar 2009
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    blaga Регулярка правильна, просто надо следить за подмасками. Достаточно убрать скобки внутри href="(.*)" ИЛИ обращаться ко второй подмаске (ака $2 во втором параметре)

    PHP:
    echo preg_replace('#<a href=".*">(.*)</a>#sU',"$1",'<a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>');
    Или проще:
    PHP:
    preg_replace('~<a[^>]*>(.+)</a>~Usi','$1',$in);
    Code:
    На входе: <a href="/bitrix/exturl.php?goto=http%3A%2F%2Fwww.opera.com">www.opera.com</a>
    
    На выходе: www.opera.com
    .:EnoT:. К слову, переменная - НЕ может начинаться на цифру
     
    _________________________
    1 person likes this.
  19. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    я щас об стенку убьюсь. ни одна регулярка не схватывает... :(
    короч вот он чертов быдло код.
    PHP:
    function get_full_vul($url)
    {
    $r=file_get_contents($url);
    $re='#<div class="cont-cont">(.*)<p><strong>Источники#sU';
    preg_match($re,$r,$all);

    $e=str_replace('<div class="cont-cont">'," ",$all[0]);
    $e=str_replace('<div class="title-line" id="title-vulnerability">'," ",$e);
    $e=str_replace('</div>'," ",$e);
    $e=str_replace('<div class="postblock3">'," ",$e);
    $e=str_replace('<p><strong>Источники'," ",$e);
    preg_replace('~<a[^>]*>(.+)</a>~Usi','$1',$e);


    echo 
    $e;
    }

    get_full_vul("http://www.securitylab.ru/vulnerability/369396.php");
    и еще что за модификатор U ? а то у меня в книге про него нету ничего.
     
  20. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    полный улёт:)) Скажи толком, просто, что тебе надо, тут дел на 5 минут:) Лучше дай ссылку на страничку и чо там с ней надо "выцепить/заменить"
     
    1 person likes this.
Thread Status:
Not open for further replies.