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

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

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

 

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

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

тема: Синтаксис регулярных выражений
 
 автор: kilogram   (09.06.2012 в 19:40)   письмо автору
 
 

Читаю Котерова "Регулярные выражения".
Там пишут что \w - любая буква или цифра.
Написал такой код:

<form action="index.php" method="post">
<input type="text" name="username"/>
<input type="submit" value="Отправить" />
</form>
<?php 
///[a-zA-Z]+-[a-zA-Z]/
// preg_match("шаблон_поиска", "строка_в_которой_проводится_поиск", массив_с_результами_поиска) 
if(isset($_POST['username']))
$user $_POST['username'];
else { 
$user ''; exit;}
echo 
$user.'<br>';


if(
preg_match("/\\w/"$user)) { 


    echo 
"Имя пользователя задано в правильном формате"
} else { 
    echo 
"Имя пользователя задано в <b><font color='red'>неправильном формате</font></b>";  


?>



Почему не работает кирилица в \w?

2. Там пишут что есть выражения, которые определяют группу символов.
пишу так:
if(preg_match("/[[:alpha:]]/", $user)) { 

определяет только латиницу почему то

3. Пишут что знак "*" соответствует 0 или больше символов, пишу так
/a-*-/

а затем ввожу одну букву, выдает ошибка, оказывается нужно 1 и более, а не ноль и более.

4.http://s2.ipicture.ru/uploads/20120609/6Sdxdkh1.jpg
Пробую так:
if(preg_match("/a{1}/", $user)) { 

хоть напишу один раз или 10 раз букву "а" выдает что верно, хотя здесь ограничитель в один раз
Пишу так:

if(preg_match("/a{1,2}/", $user)) { 

Букву "а" согласно данному выражению я могу вводить от 1-2 раз, ввожу 10 раз букву "а" и выдает что верно

5. Пишут что если знак "?"(квантификатор), перед ним символ может повторятся только 0 или 1 раз(но не более!).
Пишу такой код:
if(preg_match("/a?/", $user)) { 

Ввожу 10 раз букву а латинскую и выдает что верно.

Если кто может, объясните вот эти действия почему так и также почему не работет кирилица. Заранее благодарю.

  Ответить  
 
 автор: cheops   (09.06.2012 в 19:52)   письмо автору
 
   для: kilogram   (09.06.2012 в 19:40)
 

1. \\w и \w - это не одно и тоже. Кроме того, у вас регулярное выражение проверят лишь один (любой) символ, это именно то, что вы хотите?

  Ответить  
 
 автор: cheops   (09.06.2012 в 19:53)   письмо автору
 
   для: kilogram   (09.06.2012 в 19:40)
 

2. Это из другого диалекта регулярных выражений, в Perl-диалекте вместо этого используется \d

  Ответить  
 
 автор: cheops   (09.06.2012 в 19:54)   письмо автору
 
   для: kilogram   (09.06.2012 в 19:40)
 

3. у вас после * есть еще один символ -, поэтому выражение соответствует минимум 2 символам.

  Ответить  
 
 автор: cheops   (09.06.2012 в 19:56)   письмо автору
 
   для: kilogram   (09.06.2012 в 19:40)
 

4-5. Вы не указываете границы выражения, поэтому регулярное выражение находит один символ 'a' и рапортует об успехе. Чтобы сравнить его со всей строкой нужно указать начало слова ^ и конец $
if(preg_match("/^a{1}$/", $user)) { 


PS Под разные вопросы лучше заводить разные темы.

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

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