Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PREG_MATCH и его функции, прошу объяснить

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Прошу помочь в этом вопросе
antobra
Отправлено: 14 Декабря, 2010 - 10:57:46
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




Ребята, помогите в следующем:

1. Вопрос по коду:
PHP:
скопировать код в буфер обмена
  1. if (preg_match ("/^.[0-9a-z]{5,13}$/i", $_POST[login]) ) {
  2.            
  3.         echo "Урррра!";
  4.  
  5. } else { echo "Вы ввели Логин некорректно"; }    


Т.е. тут может быть вхождение с символами 0-9a-zA-Z и количеством от 6 (т.к. отчет начинается от 0) и закачивается 12 сиволами. Верно? Или я что-то не понимаю.
Данный скрипт пропускает от 6 и до 15 символов (16 символов уже не пропускает).
Что я не понял? нужен лимит в 12 символов.

2. Я не нашел нигде пояснения черточкам /{какой-то код из preg_match}/ - что они значят?

3. Объясните пожалуйста что такое регистронезависимость (i) и жадность (U). Статью - http://www.php.su/lessons/?lesson_17 я прочитал. Вот не понимаю что значят слова, которые написал выше.

Буду очень благодарен ответам!

(Отредактировано автором: 14 Декабря, 2010 - 11:53:44)

 
 Top
Invert
Отправлено: 14 Декабря, 2010 - 11:08:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Регистронезависимость это отсутствие разницы между буквами в верхнем и нижнем регистре, т.е. А=а, б=Б. В вашем случае 0-9a-z, A-Z не нужно, стоит i.

Черточки это обозначение регулярки: /регулярка/.

По поводу жадности долго объяснять, вы бы почитали статьи, их много хороших.

И отчет начинается с 1, т.е. {2,5} это диапазон от 2-х до 5-ти.
 
 Top
antobra
Отправлено: 14 Декабря, 2010 - 11:11:01
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




Invert пишет:
Регистронезависимость это отсутствие разницы между буквами в верхнем и нижнем регистре, т.е. А=а, б=Б. В вашем случае 0-9a-z, A-Z не нужно, стоит i.

Черточки это обозначение регулярки: /регулярка/.

По поводу жадности долго объяснять, вы бы почитали статьи, их много хороших.

И отчет начинается с 1, т.е. {2,5} это диапазон от 2-х до 5-ти.


Спасибо! А не подскажите в чем глюк, когда я ставлю максимально 13, а вводить можно все-равно до 15?
 
 Top
Invert
Отправлено: 14 Декабря, 2010 - 11:23:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




У вас точка стоит вначале, самым первым символом. Она является дополнительным символом.
У вас все логины начинаются с точки?
 
 Top
Мелкий Супермодератор
Отправлено: 14 Декабря, 2010 - 11:24:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




antobra пишет:
Т.е. тут может быть вхождение с символами 0-9a-zA-Z и количеством от 6 (т.к. отчет начинается от 0) и закачивается 12 сиволами. Верно?

Не совсем.
Здесь может стоять любой символ, кроме перевода строки, после него от 5 до 13 символов диапазоне 0-9a-zA-Z.
перед [ стоит точка - любой символ, т.е. Вот почему 15 тоже проходят - не знаю, недостаточно хорошо знаю регулярки...

Invert пишет:
Она является дополнительным символом.

Если бы... Она является специальным символом, означающим любой символ, кроме перевода строки.

(Отредактировано автором: 14 Декабря, 2010 - 11:26:22)



-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 14 Декабря, 2010 - 11:47:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Мелкий пишет:
Если бы... Она является специальным символом, означающим любой символ, кроме перевода строки
Рассматриваемый конкретный случай анализируемой вхожной строки для предоставленного регулярного выражения включает корректные последовательности латинских символов - таким образом первоначальный символ точки обеспечивает соответствие дополнительную символу сторки в независимости от конфигурации жадности по причине цели соответствия полной строке шаблону а не ее отдельных компонентов - кроме того увеличение соответствующей длины строки на единицу обеспечивает индексацией с нуля


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Invert
Отправлено: 14 Декабря, 2010 - 11:53:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




JustUserR пишет:
увеличение соответствующей длины строки на единицу обеспечивает индексацией с нуля

Э? А можно подробней?
 
 Top
antobra
Отправлено: 14 Декабря, 2010 - 11:57:31
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




JustUserR пишет:
Мелкий пишет:
Если бы... Она является специальным символом, означающим любой символ, кроме перевода строки
Рассматриваемый конкретный случай анализируемой вхожной строки для предоставленного регулярного выражения включает корректные последовательности латинских символов - таким образом первоначальный символ точки обеспечивает соответствие дополнительную символу сторки в независимости от конфигурации жадности по причине цели соответствия полной строке шаблону а не ее отдельных компонентов - кроме того увеличение соответствующей длины строки на единицу обеспечивает индексацией с нуля


ну замудрил))) Т.е. в общем отчет начинается с нуля? А как же отобразить предел? о котором я писал в первом сообщении
 
 Top
JustUserR
Отправлено: 14 Декабря, 2010 - 12:05:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Invert пишет:
Э? А можно подробней?
Указанное вами регулярное выражения включает набор элементов осуществляющих следующее позитивное сравнение - для первого символа обеспечивает совпадения с приозвольным элементом которым в частности может быть и символ новой строки при определени специализированной конфигурации - в то время как последующий шаблон обеспечивает сопоставление с алфативно-цифровыми комбинациями до 14 символов
antobra пишет:
Я не нашел нигде пояснения черточкам /{какой-то код из preg_match}/ - что они значят?
Оригинальный синтаксис с использованием левых слешей для регулярных варажениях применяется в языках программирования где они является константными выраженимями исходнго кода - таких как Perl и JS и в языке PHP они оставлена для визуальной совместимости хотя вложенное выражения располагается в более высоком уровне экранирования строки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Uchkuma
Отправлено: 14 Декабря, 2010 - 16:13:24
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




antobra пишет:
количеством от 6 (т.к. отчет начинается от 0)

Ага. А если в программировании сложить 0+0 будет 1 Радость

Вспоминается история. Один товарищ возвращает другому долг 20000 руб. тысячными банкнотами. Тот пересчитывает купюры и говорит:
- Так тут же одной тысячи не хватает!
- Как не хватает? А ну-ка пересчитай еще раз!
- Ноль, один, два, три, четыре...
 
 Top
Мелкий Супермодератор
Отправлено: 14 Декабря, 2010 - 16:23:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





Uchkuma пишет:
Ага. А если в программировании сложить 0+0 будет 1

мне больше нравится 1+1:
математика = 2
биология = 3
двоичная система счисления = 10
булева логика = 1
маркетинг = сколько потребуется
физика = сколько получится (если столкнуть 2 объекта, то может получиться очень много объектов поменьше)


antobra пишет:
количеством от 6 (т.к. отчет начинается от 0) и закачивается 12 сиволами

Таки вроде тут именно количество символов, считая с 1, т.к. в уроке:
Цитата:
? - одно или ноль вхождений предшествующего символа или подмаски.
* - любое количество вхождений предшествующего символа или подмаски. В том числе и ноль.
...
Например, * - то же самое, что {0,}. ? - то же, что {0,1}. {5,7} - 5,6 или 7 повторений.

значит, 0 - нет вхождения, а не первое вхождение.

(Отредактировано автором: 14 Декабря, 2010 - 16:27:21)



-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 14 Декабря, 2010 - 16:34:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




antobra пишет:
2. Я не нашел нигде пояснения черточкам /{какой-то код из preg_match}/ - что они значят?

эо просто показывает что это регулярка. Можно ставить любые 2 одинаковых символа. Я например использую решётку #
antobra пишет:
3. Объясните пожалуйста что такое регистронезависимость (i) и жадность (U). Статью - http://www.php.su/lessons/?lesson_17 я прочитал. Вот не понимаю что значят слова, которые написал выше.

регистронезависимость это когда большие и маленькие буквы щитаются одинаковыми.
Жадность это когда регулярка будет искать до последнего вхождения. Пример:
PHP:
скопировать код в буфер обмена
  1. $str = '<p>text1</p><p>text2</p>';
  2. // такой пример жадный и найдёт всё от первого <p> до последнего </p>
  3. preg_match('#<p>(.*)</p>#', $str, $x);
  4. echo $x[0];
  5. // такой пример не жадный и найдёт всё от первого <p> до первого </p>
  6. preg_match('#<p>(.*)</p>#U', $str, $x);
  7. echo $x[0];


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB