Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задания на изучение регулярных выражений PCRE 
:(
    Опции темы
Mal Hack
Дата 16.6.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Задание на знание PCRE синтаксиса регулярных выражений (preg_*();).
Не постите ответ сразу, подумайте. Главное не просто написать тот или иной рэг, а сделать это оптимально.
Старался простые не давать, чтобы не легко было, т.к. учится человек когда думает.
  • 1. Пользователь ввел на форме данные в поле "Телефон". Надо проверить, подходит ли строка введенная пользователем под шаблон: (ХХХХ) ХХХ-ХХХХ, причем важный момент в том, что 78-9789 - является правильным адресом (т.е. маска не жесткая по кол-во цифр, но кол-во цифр не должно быть 1, к примеру). После ) может быть пробел, а может и нет, а может и несколько (это подсказка).
  • 2. Есть текст с списками цен. Надо вырезать (получить массива $matches) из него цены в USD, RUR или EU. ( как пример могут быть строка 23.78 USD ).
  • 3. Необходимо в тексте выделить доменные имена, сделав их ссылкам, в зонах com, net, org красным цветом, а ru, su, ua - синим, aero - зеленым smile. Т.е. в тексте есть "зайди сюда ya.ru". Подсказка - выполнить надо через callback функцию. ЗЫ: ссылка может иметь вид: ya.ru?param1=param2&... или ya.ru/wer/wr/wr.
  • 4. Ну и банальное. Проверка e-mail'a. Подсказка: домен и мыло могут заканчиваться только на букву или число. В середине имени мыла может быть "." , "_" , "-", в домене только "-".
Думаю для первого раза достаточно.
Что не понятно по вопросам - спрашиваете.
Проверка результатов будет во вторник - среду.
Ответы сразу не пишите, чтобы другие не видели...
Как вариант можете присылать ответы на мыло [email protected] или на ПМ, во вторник - среду выложу.

Это сообщение отредактировал(а) Mal Hack - 16.6.2005, 19:47
PM ICQ   Вверх
Mal Hack
Дата 22.6.2005, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Итоги завтра подведу... Сегодня не успеваю.
PM ICQ   Вверх
Opik
Дата 22.6.2005, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Mal Hack
эт хорошо smile я тож сёня попытаюсь сделать smile)
PM MAIL Skype   Вверх
Рыжий
Дата 22.6.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 1
Всего: 20



ой, блин я вообще забыл про них, после обеда решу последние 2 smile
PM MAIL ICQ   Вверх
Mal Hack
Дата 22.6.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



думаю никто не обидится, если я до субботы протяну? Диплом все-таки smile))
В субботу стопудова будет.
Да и время вам еще дается.
PM ICQ   Вверх
Рыжий
Дата 22.6.2005, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 1
Всего: 20



Mal Hack
Не обидимся конечно, тем более я задания так и не сделал, блин лето а дел по горло smile smile
PM MAIL ICQ   Вверх
Mal Hack
Дата 26.6.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Резалты будут где-то через час...

Opik и где твои попытки? smile
PM ICQ   Вверх
Mal Hack
Дата 26.6.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Мой вариант:
Код
<?php

$phone = "(1123) 123-1233";
print "Phone: " . ( ( preg_match( "#^\(\d{2,4}\)\s*\d{1,3}\-\d{2,4}$#" , $phone ) ) ? "Good" : "Bad" );

print "<br><br><br>";

$data = "jkhka 12.8 EU dsfns,. fjsfkl sfsnfsf 54 USD e656 56 56 23,6 RUR";
preg_match_all( "#\d+(?:(?:,|\.)\d)?+\s+(?:RUR|USD|EU)#s" , $data , $matches , PREG_PATTERN_ORDER );
print_r( $matches );

print "<br><br><br>";

$str = "ya.ru is the very good site, but not better that kgb.ru. test.su is opened. templ.com closed aeroflot.aero";
print preg_replace( "#([a-z0-9]{1,}(?:(?:[a-z0-9]{1,}[a-z0-9\-\.]{0,1}[a-z0-9]{1,})|[a-z0-9]{1,})*\.([a-z]{2,4}))#ei" , "test( '\\1' , '\\2' )" , $str );
                                                                                                              
function test( $f , $d )
 {
  $d = strtolower( $d );

  if( $d == "com" || $d == "net" || $d == "org" )
   {  return "<a href='http://" . $f . "'><span style='color:red;'>" .$f . "</span></a>";  }

  if( $d == "ru" || $d == "su" || $d == "ua" )
   {  return "<a href='http://" . $f . "'><span style='color:blue;'>" .$f . "</span></a>";  }

  if( $d == "aero" )
   {  return "<a href='http://" . $f . "'><span style='color:green;'>" .$f . "</span></a>";  }

  return $f;
 }

print "<br><br><br>";

$email = "[email protected]";
print "Email: " . ( ( preg_match( "#^([a-z0-9]){1}[a-z0-9\-_.+]*([a-z0-9]){1}@[a-z0-9]{1,}(([a-z0-9]{1,}[a-z0-9\-\.]{0,1}[a-z0-9]{1,})|[a-z0-9]{1,})*\.[a-z]{2,4}$#i" , $email ) ) ? "Good" : "Bad" );

?>

Добавлено @ 16:16
Вариант PARROT
ЗЫ: Сразу ставил параметры чтобы показать что не правильно.
Код
<?php

#PARROT

$phone = "(112387593875894758937858937589733) 12456464563-124645-6464-6464-645-64633";
print "Phone: " . ( ( preg_match( "#^[\(\d\)]+[\s]*[\d-]+[\d]{2,4}$#" , $phone ) ) ? "Good" : "Bad" );

print "<br><br><br>";

$data = "jkhka 12.8 EU dsfns,. fjsfkl sfsnfsf 54 USD e656 56 56 .23. RUR";
preg_match_all( "#[\d.]+[\s]*(USD|RUR|EU)+#s" , $data , $matches , PREG_PATTERN_ORDER );
print_r( $matches );

print "<br><br><br>";

$str = "ya.ru is the very good site, but not better that kgb.ru. test.su is opened. templ.com closed aeroflot.aero";
print preg_replace( "#([\w-]*\.){1,2}[\w]{2,4}[?]?[[\w=&//]*]?#ei" , "test( '\\1' , '\\2' )" , $str );
                                                                                                             
function test( $f , $d )
 {
  $d = strtolower( $d );

  if( $d == "com" || $d == "net" || $d == "org" )
   {  return "<a href='http://" . $f . "'><span style='color:red;'>" .$f . "</span></a>";  }

  if( $d == "ru" || $d == "su" || $d == "ua" )
   {  return "<a href='http://" . $f . "'><span style='color:blue;'>" .$f . "</span></a>";  }

  if( $d == "aero" )
   {  return "<a href='http://" . $f . "'><span style='color:green;'>" .$f . "</span></a>";  }

  return $f;
 }

print "<br><br><br>";

$email = "adsc...fsdfsd____f@ys_sa.ma-test-il.ru";
print "Email: " . ( ( preg_match( "#^(\w*(.|_|-))*@([\w-]*\.){1,2}[\w]{2,4}$#i" , $email ) ) ? "Good" : "Bad" );


?>


Это сообщение отредактировал(а) Mal Hack - 26.6.2005, 16:17
PM ICQ   Вверх
Mal Hack
Дата 26.6.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Вариант PHP_Script.
ЗЫ: С деньгами все работает.
Код
<?php

#PHP-Script

$phone = "sdasdsadssd(112387593875894758937858937589733) 12456464563-124645-6464-6464-645-64633adasdasd";
print "Phone: " . ( ( preg_match( "#(\(\d{4,4}\) ?)?\d{2}\-?\d{2,2}\-?\d{2,2}#" , $phone ) ) ? "Good" : "Bad" );

print "<br><br><br>";

$data = "jkhka 12.8 EU dsfns,. fjsfkl sfsnfsf 54 USD e656 56 56 23.0 RUR";
preg_match_all( "#\d{0,10}\.?\d{1,2}? ?(USD|EU|RUR)#is" , $data , $matches , PREG_PATTERN_ORDER );
print_r( $matches );

?>

PM ICQ   Вверх
Рыжий
Дата 26.6.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 1
Всего: 20



Цитата(Mal @ 26.6.2005, 15:20)
С деньгами все работает.


Что честно? Урря! smile
PM MAIL ICQ   Вверх
PARROT
Дата 26.6.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Результаты есть. А вывод? Что у меня например не так? smile


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 26.6.2005, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



PARROT основная ошибка что ты не использовала ограничители, это раз, а два, то что в 3 и 4 задании рещила обойтись общим случаем. Ты должна регуляркой проверять по максимуму.
PM ICQ   Вверх
PARROT
Дата 26.6.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50



Совсем ни одного правильного ответа? smile
Скажем, 3 задание, не совсем для начинающих...
Давайте разберем функции, которыми пользовались. Только пожалуйста подробно! Спасибо!
Читать - читала. Но мне почему-то чтение книг и мануалов ничего не дает! Только подробное объяснение, пример и практика.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Mal Hack
Дата 26.6.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



PARROT в принципе, если на вход идет нормальная строка, то у тебя работает, а если идет подставная (заведомо ошибочная) то у тебя тоже рэг срабатывает, чего быть не должно.

PM ICQ   Вверх
Sardar
Дата 26.6.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Mal Hack на доменах 4того уровня твой рег в примере 3 не сработает. Так думаю лучше:
Код
$zones=array(
 array("com", "net", "org"), "<a href='http://[::subj::]' style='color:red; text-decoration: underline;'>[::subj::]</a>",
 array("ru", "su", "ua"), "<a href='http://[::subj::]' style='color:blue; text-decoration: underline;'>[::subj::]</a>",
 array("aero"), "<a href='http://[::subj::]' style='color:green; text-decoration: underline;'>[::subj::]</a>",
);

function test($m) {
  global $zones;
  $h=strtolower($m[2]);
  for($i=0; $i<sizeof($zones); $i+=2) {
    if(in_array($h, $zones[$i])) return str_replace("[::subj::]", $m[1], $zones[$i+1]);
  }
  return "<b>".$m[1]."</b>"; //нет данных
}

$str = "ya.ru is the very good site, but not better that. .ttt.wwer.wow.kgb.ru. test.su is opened. templ.com closed aeroflot.aero";
echo preg_replace_callback("/(?<=^|\s)([a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+)*(?:\.([a-zA-Z0-9_]+)))/","test",$str);


Домен: .ttt.wwer.wow.kgb.ru (точка в начале) специально не ищеться, если это не верно, то уберать конструкцию: (?<=^|\s)


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.