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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
juniormra

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь может подсказать в чем проблема?
Значит так, возникла необходимость проверить все письма пришедшие на Return-path:<email>, с темой undelivered, ну или в роде этой и выдернуть оттуда email адреса.
Использовал следующий код: preg_match_all( '/[0-9a-z\._-]{3,15}@[0-9a-z\.-]{3,32}\.[a-z]{2,4}/i', $mail, $emails )
Регулярное выражение, конечно, не идеальное, но должно было бы выдернуть все email адреса.
Но работает, как-то, не стабильно - до того как среди писем были те, которые содержали точку в адресе (.), скрипт выдергивал email-ы вида - name_lastname@anything.com, blah_balh@foo.net.., т.е. те которые содержали символ подчеркивания. Не пойму в чем дело. Пытался использовать другие регулярные выражения, но безрезультатно.
Может проблема заключается в чем-то другом?
 
Добавлено:
И еще, проверил, что если указать номер письма (где содержатся email-ы, которые обычно не обнаруживаются reg-ex-ом) явно, то reg-ex их обнаруживает.
Вот часть кода:
 
foreach ($mails as $mail_arr){
    $mail = $pop3->pop3_retr($mail_arr[0]);
    preg_match_all('/[0-9a-z\._-]{3,32}@[0-9a-z\.-]+\.[a-z]{2,4}/i', $mail, $emails);
 
}
 
метод pop3_retr() возвращает все письмо в виде простого текста.
 
Добавлено:
Сорри, нашел проблему.
Регулярка тут не причем, просто, надо было вынести preg_match_all() из цикла и проверить весь текст писем
или же объединять массив $emails  с другим массивом... ну или еще как-нибудь

Всего записей: 1 | Зарегистр. 08-07-2008 | Отправлено: 10:21 08-07-2008
jadio

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
 
Имеется код на PHP:
 
$text = preg_replace('/<a([^>]+)>/i', '<a\\1 rel="nofollow">', $text);
 
Результат: ко всем ссылкам, содержащимся в $text, добавятся аттрибут rel="nofollow".
 
Вопрос: помогите, пожалуйста, написать фрагмент кода, который добавит <noindex> в начале и </noindex> в конце к тем ссылкам ссылкам, у которых уже имеется атрибут rel="nofollow".

Всего записей: 2 | Зарегистр. 25-08-2006 | Отправлено: 04:04 15-07-2008
Delphi6



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

Цитата:
Вопрос: помогите, пожалуйста, написать фрагмент кода

Это больше звучит как "сделайте за меня" Надо приводить пример кода который вы пытались для этой цели использовать и у вас не заработал. Ведь вы что хотите получить в результате: просто рабочий код или знания?

Код:
$text = preg_replace('#(<a[^>]+rel="nofollow"[^>]*>[^<]*</a>)#i', '<noindex>$1</noindex>', $text);

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 08:34 15-07-2008 | Исправлено: Delphi6, 08:34 15-07-2008
jadio

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6, спасибо большое.  

Всего записей: 2 | Зарегистр. 25-08-2006 | Отправлено: 08:36 15-07-2008
dmitro1950



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно и не в тему. Скачал сайт. В имени страницы вместо символа ? появился символ @ Например:
index.php@productid=385 , а надо index.php?productid=385
Попытался исправить. Но система не дает. Как это исправить?

Всего записей: 330 | Зарегистр. 26-05-2003 | Отправлено: 23:29 16-07-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmitro1950

Цитата:
Но система не дает

какая система??
если операционная, то правильно - в именах файлов не должно быть знаков вопроса.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:49 16-07-2008
dmitro1950



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

Цитата:
какая система??  
если операционная, то правильно - в именах файлов не должно быть знаков вопроса.

А как можно изменить? Стоит Windows XPSP2, Апаче , Денвер.

Всего записей: 330 | Зарегистр. 26-05-2003 | Отправлено: 10:37 17-07-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmitro1950

Цитата:
А как можно изменить?  

изменить что? разрешить использование символа "?" ?
пишите свою файловую систему (вместе с операционной)  
такие символы нельзя использовать в принципе

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:28 17-07-2008
dmitro1950



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть сайт, в explorer открывается страница :
http://*.ru/index.php?show_aux_page=2
как мы видим,  в строке есть знак "?"
После того, как скачали сайт на локальный диск, то во всех страницах этого сайта появляеться знак "@", например эта же страница выглядит как
http://*.ru/index.php@show_aux_page=2
Теперь, когда мы закачиваем этот сайт на другой хостинг, то он закачивается со знаками "@". В связи с тим и вопрос - как можно заменить "@" на "?"

Всего записей: 330 | Зарегистр. 26-05-2003 | Отправлено: 22:09 17-07-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmitro1950

Цитата:
как мы видим,  в строке есть знак "?"  

потому что сервер разбирает этот запрос на части и "запускает" файл, который указан до знака вопроса, передав ему параметры, идущие после знакак вопроса.
 
сама операционная система не поддерживает знаки вопроса в именах файлов.
сколько раз повторять то?

Цитата:
В связи с тим и вопрос - как можно заменить "@" на "?"

никак.. сделать index.php файл, который, в зависимости от аргументов запроса через браузер считывает тот или иной файл с @ в названии файла и выдает его.  
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:16 17-07-2008
Delphi6



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

Цитата:
Теперь, когда мы закачиваем этот сайт на другой хостинг, то он закачивается со знаками "@". В связи с тим и вопрос - как можно заменить "@" на "?"

Так это же нельзя делать Ведь вы в реале из динамического сайта получили статический Вы сохранили только копии результатов index.php с разными параметрами и так и должно быть Если же вы все равно хотите симулировать запросы GET в адресной строке, то mod_rewrite вам руки Там можно преобразовывать запросы вида:
 
http://*.ru/index.php?show_aux_page=2
 
в реально существующие (файлы):
 
http://*.ru/index.php@show_aux_page=2
 
Удачи

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 09:43 18-07-2008 | Исправлено: Delphi6, 09:44 18-07-2008
dmitro1950



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

Цитата:
Удачи

Спасибо за подсказку!

Всего записей: 330 | Зарегистр. 26-05-2003 | Отправлено: 13:30 18-07-2008
gasha

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите, как обработать такой вот случай...
Вот ссылка на данные, в ссылке есть дата, если кто это сообщение увидит спустя некоторое время, то пусть подкорректирует дату (gfs20080718)
"http://nomads6.ncdc.noaa.gov:9090/dods/gfs_master/gfs20080718/gfs_master_00z.ascii?lftxsfc[0:60][300:316][56:76]"
 
Необходимо эти данные построчно загнать в массив с совпадением имеющихся там индексов.  
 
Данные можно описать как таблица с длиной в 21 столбец и высотой 16 строк и всего получится 61 таблица.
То есть я хочу из этих данных получить 61 массив. Значения в квадратных скобках в массив включать не надо.
 
Спасибо!

Всего записей: 4 | Зарегистр. 13-09-2006 | Отправлено: 13:41 18-07-2008 | Исправлено: gasha, 13:43 18-07-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gasha
Второй раз прочитал и ни как не мог с начала понять что именно надо сделать Вроде урл нормальный, а где там 61 элементов? Оказалось вам страничку которую выдает этот урл надо покромсать А что здесь сложного? Берете просто рег. выражение и вырезаете первые два элемента которые для вас X и Y индексы элемента массива, которому присваиваете массив из 21 элемента. У вас должно получиться 3Х мерный массив... если я все понял правильно.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 11:02 19-07-2008
gasha

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Строки начинаются с [0][0] - первая цифра отвечает за момент времени и таких блоков будет 61 ([60][0]).
 
Хотел бы получить либо 61 двумерный массив, либо 1 трёхмерный. В массиве должны быть только цифры (они могут быть дробными, отрицательными, с переменным количесвтом цифр после запятой)

Всего записей: 4 | Зарегистр. 13-09-2006 | Отправлено: 15:52 23-07-2008
gasha

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Самостоятельно разобрался...
Исходил из принципа считать массив, а потом "индексировать" его.
 
//Индексирование массива
function get_index ($time, $latitude, $longitude)
{
switch ($latitude)
{
case 59.0: $latitude =   2; break;
case 59.5: $latitude =  23; break;
case 60.0: $latitude =  44; break;
case 60.5: $latitude =  65; break;
case 61.0: $latitude =  86; break;
case 61.5: $latitude = 107; break;
case 62.0: $latitude = 128; break;
case 62.5: $latitude = 149; break;
case 63.0: $latitude = 170; break;
case 63.5: $latitude = 191; break;
case 64.0: $latitude = 212; break;
case 64.5: $latitude = 233; break;
case 65.0: $latitude = 254; break;
case 65.5: $latitude = 275; break;
case 66.0: $latitude = 296; break;
case 66.5: $latitude = 317; break;
case 67.0: $latitude = 338; break;
case 67.5: $latitude = 359; break;
case 68.0: $latitude = 380; break;
case 68.5: $latitude = 401; break;
case 69.0: $latitude = 422; break;
case 69.5: $latitude = 443; break;
case 70.0: $latitude = 464; break;
}
switch ($longitude)
{
case 28.0: $longitude =  0; break;
case 28.5: $longitude =  1; break;
case 29.0: $longitude =  2; break;
case 29.5: $longitude =  3; break;
case 30.0: $longitude =  4; break;
case 30.5: $longitude =  5; break;
case 31.0: $longitude =  6; break;
case 31.5: $longitude =  7; break;
case 32.0: $longitude =  8; break;
case 32.5: $longitude =  9; break;
case 33.0: $longitude = 10; break;
case 33.5: $longitude = 11; break;
case 34.0: $longitude = 12; break;
case 34.5: $longitude = 13; break;
case 35.0: $longitude = 14; break;
case 35.5: $longitude = 15; break;
case 36.0: $longitude = 16; break;
case 36.5: $longitude = 17; break;
case 37.0: $longitude = 18; break;
case 37.5: $longitude = 19; break;
case 38.0: $longitude = 20; break;
}
$index = $time*483+$latitude+$longitude;
return $index;
}
//Открываем файл и создаём массив
function create_array ($file)
{
$file = file_get_contents($file);
//Удаляем в файле все знаки [ ] и числа между ними
$file = ereg_replace("\[[0-9]{1,2}]","",$file);
$file = str_replace ("time", "", $file);
$file = str_replace ("lat", "", $file);
//Считываем строку в массив, используя запятую как разделитель
$file_array = explode (",", $file);
return $file_array;
}
 
$file - строка содержит содержимое ссылки  "http://nomads6.ncdc.noaa.gov:9090/dods/gfs_master/gfs20080726/gfs_master_00z.ascii?lftxsfc[0:60][298:320][56:76]"
 
С работающим примером можно ознакомиться здесь

Всего записей: 4 | Зарегистр. 13-09-2006 | Отправлено: 19:00 26-07-2008 | Исправлено: gasha, 01:03 02-08-2008
andreypopov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Гуру RegExp, please, помогите с выражением:  
<img src="http://images.example.com/itemdetails/S130-8010
/S230-5010-out1-vg.jpg">
Как можно убрать перевод строки после S130-8010. Пробовал  
$img = preg_replace("[\r]", " ", $img); не работает  
Sorry за может глупый вопрос.  

Всего записей: 13 | Зарегистр. 10-02-2006 | Отправлено: 03:01 09-08-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andreypopov

Цитата:
$img = str_replace(array("\n","\r\n","\r"), " ", $img);



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:15 09-08-2008 | Исправлено: Cheery, 03:16 09-08-2008
andreypopov

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

Цитата:
$img = str_replace(array("\n","\r\n","\r"), " ", $img);

Большое спасибо Cheery, работает. Не сочти назойливым но может подскажешь как еше убрать пробелы после S130-8010
 
Извини что ввел в заблуждение в первом примере правильно так:
$img = str_replace(array("\n","\r\n","\r"), "", $img); обрати внимание двойные ковычки. Сейчас выкрутился так
$img = str_replace(" /", "/", $img);
$img = str_replace("  /", "/", $img);
но может есть более красивее решение. Проблема в том что после S130-8010 может идти как и не ограниченное число пробелов так и таб. (\t) и как с этим боротся не знаю.  

Всего записей: 13 | Зарегистр. 10-02-2006 | Отправлено: 03:56 09-08-2008 | Исправлено: andreypopov, 04:48 09-08-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andreypopov

Цитата:
Не сочти назойливым но может подскажешь как еше убрать пробелы после S130-8010  

пробел там есть изначально, или создан выражением выше? если им, то убрать пробел между кавычками во втором аргументе. вот так

Цитата:
$img = str_replace(array("\n","\r\n","\r"), "", $img);  



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:08 09-08-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 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