Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобрать регулярное выражение.
 
 автор: Axxil   (24.01.2005 в 16:31)   письмо автору
 
 

Вот не думал что они мне пригодятся...
Обещаю сегодня же начать учить их.
Но пока очень надо разобраться в следующем выражении. Что оно делает?

  $var="/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/";

   
 
 автор: cheops (из ННГУ)   (24.01.2005 в 18:22)
 
   для: Axxil   (24.01.2005 в 16:31)
 

Вырезает в
<a href = что-то>

Это регулярное выражение вырезает "что-то"... но оно немного закручено, можно составить менее сложное и выполняющее ту же функцию

   
 
 автор: axxil   (25.01.2005 в 00:29)   письмо автору
 
   для: cheops (из ННГУ)   (24.01.2005 в 18:22)
 

Нет, оно понятно что вырезает.
Я даже знаю что.
запись вида http://www.nameofsite.com
Но есть большое подозрение что делант оно это неправильно.
>можно составить менее сложное и выполняющее ту же функцию
Если несложно помогите составить...
А может есть другой способ для задачи:
Скрипт читает в переменную веб-страницу, потом с помощью данного выражения разбирает её и ищет в ней ссылки на определённые страницы.

   
 
 автор: cheops   (25.01.2005 в 00:43)   письмо автору
 
   для: axxil   (25.01.2005 в 00:29)
 

Тут главное не нужно всё сразу определять... Вырежте сначала то что идёт после href= и до > - а потом уже средствами PHP можно посмотреть заключено это в кавычки или нет...
"/<[\s]*a[\s]*href[\s]*=[\s]*([^>]*)>/i"

   
 
 автор: Axxil   (25.01.2005 в 09:51)   письмо автору
 
   для: cheops   (25.01.2005 в 00:43)
 

Понятно.
Точнее непонятно, но надо понимать...
Посоветуйте что нужно почитать по регулярным выражениям (и надо ли?) чтобы всерьёз и надолго и без лишней шелухи...

   
 
 автор: cheops   (25.01.2005 в 14:07)   письмо автору
 
   для: Axxil   (25.01.2005 в 09:51)
 

В мире сейчас только одна книга, посвящённая регулярным выражениям - это Дж. Фридл "Регулярные выражения" издательства O'REILLY с парой симпатишных сов на обложке. В начале книги он на 5 страницах стонет как тяжело было написать такую книгу, а на остальных выкладывает всю их подноготную. Даже если продерётесь хотя бы до половины книги - будете Гуру в регулярных выражениях (читать нужно раза 3 - чтение не для слабонервных :). Эта книга сейчас валяется во всех книжных магазинах - увидите - берите, даже если не будете сразу её читать. Потом пожалеете, что не купили.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=538

   
 
 автор: Sin   (25.01.2005 в 21:40)   письмо автору
 
   для: cheops   (25.01.2005 в 14:07)
 

Ух ты. А я думал что один такой - не разбераюсь в регулярных выражениях. Я прочел вашу книгу, там конечно расказывается про регулярные выражения.Но конечно все случаи жизни не расмотришь. Вот... У меня мальнький такой вопросик.
Допустим есть

<input type=text name=four class="ddd" size="2">

Вот через эту форму должно передоваться только число. т.е. если пользователь введет что то другое, то это ошибка. Подскажите пожайлуста как с помощью регулярного вырожения проверить на правельность это поле

   
 
 автор: cheops   (25.01.2005 в 22:46)   письмо автору
 
   для: Sin   (25.01.2005 в 21:40)
 

А какое число? Если это целочисленное значение, то подойдёт следующее решение
<?php
  
if(!preg_match("|^[\d]*$|"$_GET['four'])) exit("Неверный формат числа");
?>

Если это число с плавающей точкой, то следует использовать следующее регулярное выражение
<?php
  
if(!preg_match("|^[-+]?[\d]+[\.,][\d]+$|"$_GET['four'])) exit("Неверный формат числа");
?>


PS Регулярные выражение это не раздел PHP, а отдельный субъязык, как SQL, поэтому им следует уделять соответствующее внимание.

   
 
 автор: Sin   (30.01.2005 в 12:55)   письмо автору
 
   для: cheops   (25.01.2005 в 22:46)
 

Спасибо большое выручили, только вот это вырожение

<?php 
  
if(!preg_match("|^[\d]*$|"$_GET['four'])) exit("Неверный формат числа"); 
?> 

Не хочет пропускать ноль как бы его туда всунуть?

   
 
 автор: cheops   (30.01.2005 в 13:16)   письмо автору
 
   для: Sin   (30.01.2005 в 12:55)
 

Хм... вообще говоря должно... попробуйте тогда явно задать числовой диапазон
<?php 
  
if(!preg_match("|^[0-9]*$|"$_GET['four'])) exit("Неверный формат числа"); 
?>

   
 
 автор: Sin   (30.01.2005 в 15:28)   письмо автору
 
   для: cheops   (30.01.2005 в 13:16)
 

Упс извените тут немного моей вины дело в том что я писал

<?
if(!empty($_POST['five']) && preg_match("|^[0-9]*$|"$_POST['four']))
{
//..................
}
?>
Ведь !empty ноль тоже не пропускает

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования