Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можете помочь сделать правильный запрос в регулярном выражении?
у меня что-то не получается.... копался часа 2...
 

Код:
$url = Array(
'http://site.ru',
'https://site.ru',
'http://site.ru/',
'https://site.ru/',
'http://site.ru//',
'https://site.ru//',
'http://site.ru/server.php',
'https://site.ru/server.php',
'http://site.ru/blog/server.php',
'https://site.ru/blog/server.php',
);
 
 
for($i = 0; $i < count($url); $i++)
{
    if(preg_match("/^(http|https):\/\/[a-z0-9\.]*?(\/|.*)$/i", $url[$i], $arc))
        $url[$i] = $arc[2];
    echo "<a href=\"http://". $url[$i] ."\" target=\"_blank\">". $url[$i] ."</a>";
    echo "<br/>";
}

 
в результате, все строчки должны получиться такими:
 

Код:
<a href="http://site.ru" target="_blank">site.ru</a>

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 13:09 24-12-2014
Vitus_Bering



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Код:
 
  for($i = 0; $i < count($url); $i++) {
 
    if (preg_match("/^(http|https):\/\/(.+?)(\/|$).*$/i", $url[$i], $arc)) {
      $url[$i] = $arc[2];
      echo "<a href='http://$url[$i] target='_blank'>$url[$i]</a>";
      echo "<br/>";
    }
  }
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 15:04 24-12-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitus_Bering
спасибо, работает отлично

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 16:10 24-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
http://php.net/parse-url
и никаких регулярок не нужно

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 22:18 24-12-2014
ivanmara



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день уважаемые спецы. Подскажите как составить регулярку для следующей ситуации.  
 
Внутри html-ки есть куча следующих тегов (под троеточиями ещё куча кода):
 
... <a href="javascript:parent.c('%EC%E0%EC%EA%E0','2595',0)" target=plashka_004>тест</a> ...
... <a href="javascript:parent.c('gps%5Fgprs','9010',0)" target=plashka_004>gps_gprs</a> ...
... <a href="javascript:parent.c('sueta','5508',0)" target=plashka_004>sueta</a> ...
 
Задача такая: Вытащить первый и второй аргумент функции parent.c. То есть должно получится:
%EC%E0%EC%EA%E0 2595
gps%5Fgprs 9010
sueta 5508
 
Как бы это сделать с помощью регулярных выражений ?

Всего записей: 538 | Зарегистр. 23-06-2006 | Отправлено: 14:36 28-12-2014
Vitus_Bering



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ivanmara

Код:
 
if ( preg_match("'javascript:parent.c\(\'(.+?)\',\'(.+?)\'.+>'", $s, $match_arr) ) {
      $result = $match_arr[1].' ' .$match_arr[2];
}
 
echo $result;
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 17:00 28-12-2014
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день
Гуру регулярных выражений, помогите.
Я уже третий день сижу над регуляркой и не как не могу выдернуть нужные данные.
 
Есть сайт http://minfin.com.ua/currency/usd/  
от туда хочу выдергивать курс и название банка.
 
Помогите, пожалуйста.

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 17:23 05-01-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
Такие вещи лучше делать без регулярок. Да, получается длиннее.

Код:
$page = 'http://minfin.com.ua/currency/usd/';
header('Content-Type: text/html; charset=utf-8');
 
$cl2 = curl_init();  
curl_setopt($cl2, CURLOPT_URL, $page);  
curl_setopt($cl2, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($cl2, CURLOPT_HEADER, 0);  
curl_setopt($cl2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');  
curl_setopt($cl2, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($cl2, CURLOPT_TIMEOUT, 60);
curl_setopt($cl2, CURLOPT_REFERER, $page);  
$page = curl_exec($cl2);
curl_close($cl2);  
 
$doc = new DOMDocument();  
libxml_use_internal_errors(true);  
$doc->loadHTML($page);  
$xpath = new DOMXPath($doc);  
$table = $xpath->query('//table[@class="tstyle b-mrg"]')->item(0);  
foreach($table->getElementsByTagName('tr') as $tr)  
{  
   $tds = $xpath->query('.//td', $tr);
   if ($tds->length == 4)  
   {
      $name = $tds->item(1)->textContent;
      $rate = $tds->item(2)->textContent;
      echo $name. ": " . $rate . "<br>";
   }
}

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 22:36 05-01-2015
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Каким будет выражение для ситуации: получить в переменную любой сплошной набор символов, включающих один или более знак (например: =), при этом пропуская такие знаки внутри угловых скобок?
 
Так же интересует, можно ли одним выражением описать ситуацию, когда например в строке может встречаться неопределённое количество неких символов, а в шаблоне он задаётся один раз. Т.е., найти в строке все варианты за раз? —
 
(.*?)=(.*?)
(.*?)=(.*?)=(.*?)
(.*?)=(.*?)=(.*?)=(.*?)
(.*?)=(.*?)=(.*?)=(.*?)=(.*?)
 
и т. д.

Всего записей: 1435 | Зарегистр. 05-04-2010 | Отправлено: 02:59 08-02-2015
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день
Подскажите, как  получить отдельно функции

Код:
 
def zabbix_install():
    """ Zabbix install """
    dsfsdfsd
 
def test():
    """ - test """
    arfsgs rsh rwr rwh
    fsfsg
 

Хочу в результате получить первую переменную в которой будет весь блок забикс инстал, вторую тест.
Отступы это пробелы.

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 17:11 19-02-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
там не все так просто. не проще сделать без регулярки, простым циклом и определением количества отступов или начала функции?
 
что то такое, навскидку

Код:
$code =<<< CODE
def zabbix_install():  
    """ Zabbix install """  
    dsfsdfsd  
 
def test():  
    """ - test """  
    arfsgs rsh rwr rwh  
    fsfsg  
CODE;
 
$functions = array();
$current = null;
 
foreach(explode("\n", $code) as $line)
   if (preg_match('#def (\w+)\(\):#U', $line, $fun))
   {
      $current = $fun[1];
      $functions[$current] = '';    
   }
   elseif (preg_match('#^\s+(.*)$#U', $line, $body) && $current)
   {
      $functions[$current] .= $body[1];  
   }
   elseif (preg_match('#^\s+$#U', $line))
      $current = null;
   
var_dump($functions);

 
последнее условие может быть неправильным - посмотрите сами насчет синтаксиса.
оно сделано чтобы считать пустую строку окончанием функции, но это может быть и не так.

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 20:58 19-02-2015 | Исправлено: Mavrikii, 21:33 19-02-2015
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Спасибо большое
 
У меня только вопрос, почему символ решетки не отображается
Пример:

Код:
 
def zabbix_install():  
    """ Zabbix install """  
#   kjjjjfjjf
# test
# prog
#
 
def test():  
    """ - test """  
    arfsgs rsh rwr rwh  
    fsfsg  
 

 
Вот все что типо закоменчено не выводится.

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 11:59 20-02-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
Вот все что типо закоменчено не выводится.

потому, что регулярка требует наличия пустого символа в первом столбце.
в принципе можно "вытаскивать" все до следующего def или до конца строки.
смотря какие еще конструкции могут быть.
или так

Код:
preg_match('#^[\s\#]+(.*)$#U

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 04:47 22-02-2015
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть телефоны:

Цитата:
 +7 - (914) - 345 - 21 - 10  
   8 - (914) - 345 - 21 - 10  

 
Регулярка ниже не подходит, выпадает если пробелов больше 0 , а так же черточек больше 1
 

Код:
^((\+7|8)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$

 
Хотелось чтобы регулярка кушала и такие телефоны:
 

Цитата:
 +7 -   (914)   --345 --   21- 10  
   8 - (914) - 345 - 21 - 10  

 
Если есть идеи просьба ответить!

----------
Far Far Away
У каждого в голове свои тараканы...

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 09:14 20-03-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Paha_W
не подходит для чего? убейте все, кроме цифр, и отформатируйте так, как вам хочется, заодно проверив количество цифр

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 09:17 20-03-2015
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Не подходит для того чтобы телефон отпарсить

Код:
 
^(\+7|8)[^\s]*[\-]?[^\s]*([\(]?\d{3}[\)]?)[^\s]*[\-]?[^\s]*(\d{3}[^\s]*[\-]?[^\s]*\d{2}[^\s]*[\-]?[^\s]*\d{2})$
 

пытался игнорировать пробелы (( та же ситуация.

----------
Far Far Away
У каждого в голове свои тараканы...

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 09:23 20-03-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Paha_W
я же написал что делать, зачем усложнять все?

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 09:26 20-03-2015
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
По-моему у меня все четко написано.  
Спасибо за совет, но не работает. Если у вас есть решение, как вы видите данное регулярное выражение, представьте в студию, мы обсудим его.

----------
Far Far Away
У каждого в голове свои тараканы...

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 09:32 20-03-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Paha_W

Код:
<?php
$phone = "+7 - (914) - 345 - 21 - 10";  
 
$digits = preg_replace('#[^\d]#', '', $phone);
$formatted = preg_replace('#^(7|8)(\d{3})(\d{3})(\d{2})(\d{2})$#', '$1 ($2) $3-$4-$5', $digits);
echo $digits == $formatted ? "Wrong format" : ($formatted[0] == 7 ? "+" : "") . $formatted;
 

 
работает с любым представлением, главное чтобы количество цифр совпадало.

Всего записей: 15595 | Зарегистр. 20-09-2014 | Отправлено: 09:45 20-03-2015 | Исправлено: Mavrikii, 09:47 20-03-2015
Paha_W



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Оно, конечно, так! Но представьте себе, что есть текст и в нем не только телефоны,  а так же простые цифры, числа. После вырезки всего кроме цифр, наш парсер будет так же реплайсить и эти одиночные цифры.
 
усложненная ситуация:

Код:
 
$phone = "dfa 34 dfa 2 dfdf  sdfas df    +7 - (914)   -  345- 21  -10 sdf asdfsadfasd +7 - (914)   -  345- 21  -10";    
 


----------
Far Far Away
У каждого в голове свои тараканы...

Всего записей: 440 | Зарегистр. 26-05-2004 | Отправлено: 10:50 20-03-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru