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

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

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

 

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

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

тема: Разбор preg_match() из книги "Самоучитель PHP 5/6"
 
 автор: uch   (08.02.2011 в 17:15)   письмо автору
 
 

При изучении темы регулярных выражений не смог самостоятельно разобрать следующий код:
<form action="" method=post>
    <input type=text name=name value="<?= $_POST['name']; ?>">
    <input type=submit value='Проверить'>
</form><br>
<?php
if (isset($_POST['name']))
{
    if (
preg_match("|^[-0-9a-z_]+@[-0-9a-z^\.]+\.[a-z]{2,6}$|i"$_POST['name']))
    {
        echo 
"e-mail верен";
    }
    else
    {
        echo 
"e-mail неверен";
    }
}
?>


Вызывает затруднение функция preg_match(), а именно первая часть регулярного выражения "|^[-0-9a-z_]+@[-0-9a-z^\.]+\.[a-z]{2,6}$|i" .
Шаблон начинается со знака "^", который задает начало и символ "$", задающий конец шаблона.
Непонятна вот эта часть: [-0-9a-z^\.]+\.. Здесь почему-то снова появляется символ "^", а после него экранируется точка и затем еще раз происходит экранирование точки.
Скажите пожалуйста, почему должно быть именно так.

  Ответить  
 
 автор: cheops   (08.02.2011 в 17:22)   письмо автору
 
   для: uch   (08.02.2011 в 17:15)
 

В квадратных скобках знак ^ - это отрицание, т.е. символы, которые следуют за ним не должны встречаться.

  Ответить  
 
 автор: uch   (08.02.2011 в 17:38)   письмо автору
 
   для: cheops   (08.02.2011 в 17:22)
 

Спасибо, теперь понятно. В символьных классах, заключенные в квадратные кавычки, точку можно не экранировать или лучше не лениться экранировать?

  Ответить  
 
 автор: cheops   (08.02.2011 в 17:41)   письмо автору
 
   для: uch   (08.02.2011 в 17:38)
 

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

[поправлено модератором: новый вопрос выделен в новую тему При запуске скрипта в окно ввода подставляется PHP-код]

  Ответить  
 
 автор: SHAman   (08.02.2011 в 17:43)   письмо автору
 
   для: cheops   (08.02.2011 в 17:22)
 

ух-ты! Это правда так?

[123^456] обозначает "или 1 или 2 или 3, но не 4, не 5 и не 6?

  Ответить  
 
 автор: SHAman   (08.02.2011 в 17:45)   письмо автору
 
   для: SHAman   (08.02.2011 в 17:43)
 

Да не, не может быть! Это не имеет смысла. Если там не 1, не 2 и не 3, то не важно что там!

Да и в классах символов не нужно экранировать точку. А нужна она там потому что почта может быть такой:
login@my.domain.ru

  Ответить  
 
 автор: cheops   (08.02.2011 в 17:56)   письмо автору
 
   для: SHAman   (08.02.2011 в 17:45)
 

>Да не, не может быть! Это не имеет смысла. Если там не 1, не 2 и не 3, то не важно что там!
Да есть такое дело

  Ответить  
Rambler's Top100
вверх

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