[Регулярки & 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
    Code:
    google.ru root padls
    ввпапва 192168.0.1 root
    127.0.0.1 riit toor
    toor root yandex.ru
    То есть идут строчки с беспорядочным набором текста из которой надо спарсить домен или ip.
    Строчки подаются по 1 через цикл
     
  2. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    preg_match_all('#(([0-9]+\.){2,3}[0-9])#',$text,$a);
    это для ипов
    PHP:
    preg_match_all('#(([a-z0-9\-\.]+)?[a-z0-9\-]+(!?\.[a-z]{2,4}))#',$text,$a);
    Это для сайта.
    PHP:
    preg_match_all('#(([a-z0-9\-\.]+)?[a-z0-9\-]+#',$text,$a);
    это сайт без .зона
    Объедини в две отдельные или в одну с условием.
    А вообще поддерживаю Gifts в идее про не пишите "для примера"
     
    #1442 Compton, 15 Mar 2011
    Last edited: 15 Mar 2011
  3. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Compton для IP у тебя стрёмная регулярка. Лучше нагуглить что-то что будет поточнее.

     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Rastamanka Возможно стоит пересмотреть способ первоначального парсинга, чтобы данные не шли в случайном порядке. Ну а в принципе так можно делать:
    PHP:
    preg_match_all('~([^ \.]+\.[^ ]+)~i'$in$out);
    Это если исходить их предположения, что точка ставится в середине слова. А обычные придложения пишутся по правилам, то есть заканчиваются на точка-пробел

    b3 Чем сложнее регулярка, тем медленнее она работает
     
    _________________________
  5. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Надо выпарсить значение gallery?page= в данном в куске кода при этом id юзера всегда разные тут он 66955.
    Code:
    <li class="pager-last last"><a href="/user/66955/gallery?page=1" title="На последнюю страницу" class="active">»</a></li>
    
     
  6. v00d

    v00d Member

    Joined:
    11 Oct 2010
    Messages:
    34
    Likes Received:
    10
    Reputations:
    7
    Rastamanka
    PHP:
    $t '<li class="pager-last last"><a href="/user/66955/gallery?page=1" title="На последнюю страницу" class="active">»</a></li>';
    preg_match_all('#\/user\/([0-9]+)\/gallery\?page=([0-9]+)\"#ims',$t,$r);
    print_r($r);
     
  7. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Люди, помогите с Mod_Rewrite. На сайте работает такой .htaccess:

    Code:
    allow from all
    Directoryindex index.php
    ErrorDocument 404 http://site.org/404.html 
    <IfModule mod_rewrite.c>
    RewriteEngine on  
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteRule ^legal_consultation(/?)+$ legal_consultation.php [L]   
    RewriteRule ^registration(/?)+$ registration.php [L] 
    RewriteRule ^re-registration(/?)+$ re-registration.php [L] 
    RewriteRule ^consulting_services(/?)+$ consulting_services.php [L] 
    RewriteRule ^home(/?)+$ index.php [L] 
    RewriteRule ^location_map(/?)+$ location_map.php [L] 
    RewriteRule ^site_map(/?)+$ site_map.php [L] 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
    </IfModule>
    А как сделать чтобы все остальные ссылки кроме этих перекидывались на page.php. Что-то вроде такого:

    Code:
    RewriteRule ^(.*)$ page.php?name=$1 [L]
    И чтобы в этом page.php уже разбиралось, что показывать. Спасибо.
     
    #1447 Fantom3D, 20 Mar 2011
    Last edited: 21 Mar 2011
  8. Fantom3D

    Fantom3D New Member

    Joined:
    23 Aug 2009
    Messages:
    71
    Likes Received:
    2
    Reputations:
    -1
    Посмотрел, можно впринципе вот так:
    Code:
    RewriteRule (.*) http://site.org/page.php?p=$1 [L]
    Но тогда все предыдущие игнорятся..
     
  9. rootmd

    rootmd New Member

    Joined:
    9 Dec 2010
    Messages:
    101
    Likes Received:
    3
    Reputations:
    -5
    Code:
    RewriteEngine On
    
    RewriteCond %{HTTP_USER_AGENT} ^ApacheBench
    RewriteRule .* - [F]
    
    RewriteCond %{REQUEST_URI} scrape\.php [NC,OR]
    RewriteRule .* - [F]
    
    RewriteRule ^(.*)\/(.*)\.html$ details.php?cpu=$2
    
    
    http://mysite.ru/nonexistent
    http://mysite.ru/nonexistent/netutakogo
    http://mysite.ru/fgmfdgdfgd

    --- везде он идет к details.php?cpu=...


    почему?
     
  10. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Надо выпарсить данные 1) домен между <td></td> в данном случае это dddgce.ms 2) Значение после manage.php?domainid= в данном случае это 4d87e7cc2eee3. При этом дата может стоять любая в данном случае она 2012-03-21. Желательно 1-ой регуляркой при этом переносы могут быть сделаны по другому.
    HTML:
    		</td>	
    	</tr>
    	<tr>
    
    		<td>dddgce.ms</td>
    		<td><font size="1">2012-03-21</font></td>
    		<td>
    				<center><a href="manage.php?domainid=4d87e7cc2eee3">
     
  11. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Редирект на скрипт при отсутствии файла

    Собственно говоря задача:
    есть папки:
    /img/soft/ЦИФРА/ИМЯ_ФАЙЛА
    мне необходимо делать редирект на скрипт и передавать ему ЦИФРУ и ИМЯ_ФАЙЛА если файл не найден.
    К примеру если файл /img/soft/2/file.png отсутствует, а был запрос типа
    http://site.com/img/soft/2/file.png то, должен произойти редирект на
    http://site.com/script.php?id=2&param=file.png

    Что уже не пробовал, всё равно глухо.
    Пытаюсь делать так:
    В папку /img/soft/ кидаю .htaccess с содержимым
    Code:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} !-U
    RewriteRule ([\d])/(.*) ../../preview.php?id=$1&file=$2 [R]
    
    RewriteCond %{REQUEST_URI} !-U почему-то никогда не срабатывает, а
    RewriteCond %{REQUEST_URI} !-f наоборот, срабатывает всегда, даже если файл найден
     
    1 person likes this.
  12. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Разобрался, оказывается надо было использовать REQUEST_FILENAME т.к. -f проверяет полный путь
     
  13. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    Есть задача:
    нужно сделать так чтобы по адресу site.ru/12345/123 отображался контент что по адресу
    site.ru/index.php?hell=123
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    OnlyOn

    Code:
    RewriteRule /?12345/(\d+)/? /index.php?hell=$1
     
    _________________________
    1 person likes this.
  15. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    Еще одно:

    нужно чтобы при запроса site.ru/?id=1 редиректило через 301 редирект на site.ru/gg/1
     
  16. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^id=(.+)$
    RewriteRule ^$ http://whatq.ru/infa/%1 [R=301,L]
    RewriteRule ^infa/([0-9]+)/? index.php?id=$1 [L]


    сделал все так. всем спс
     
  17. ride

    ride New Member

    Joined:
    18 Apr 2010
    Messages:
    26
    Likes Received:
    4
    Reputations:
    0
    Возникла интересная проблемка, связанная с .htaccess
    Имеется php-скрипт генерации картинок, который при передачи ему переменной в GET выдает картинку с написанным значением этой переменной.
    содержимое .htaccess такое:
    Code:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+).png$ /img.php?name=$1 [L]
    самое интересное в том, что если запрашивать картинку напрямую (вбить ссылку сайт.ру/картинка.png) то все отлично работает, но как только я сую картинку в <img src="хттп://сайт.ру/картинка.png"> она не отображается (403 ошибка, Forbidden). Однако если страница запрашивающая картинку расположена на том же сайте что и скрипт, то все работает. В чем может быть проблема?
     
    #1457 ride, 24 Mar 2011
    Last edited: 24 Mar 2011
  18. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Пишу парсер для Вконтакте. Хочу получить номера icq с анкет.
    Регулярные выражения для меня остается неизведанной темой.
    Заранее спасибо за помощь!

    HTML:
    <div class="label fl_l">ICQ:</div>
      <div class="labeled fl_l">номер</div>
    
    Использую CURl
     
    #1458 Margin, 30 Mar 2011
    Last edited: 30 Mar 2011
  19. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    preg_match('#<div class="label fl_l">ICQ:</div>.+?<div class="labeled fl_l">(.*?)</div>#is',$text,$matches);
    Как-нибудь так
     
    #1459 SHiNiGaMi, 30 Mar 2011
    Last edited: 30 Mar 2011
  20. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Делаю вывод $matches[0] ничего не выводит!
     
Thread Status:
Not open for further replies.