Отличие одной регулярки от другой

ivan453

Новичок
Здравствуйте.

Эта регулярка работает
PHP:
preg_match('/^[a-zа-я0-9]+$/ui', $name)
Эта нет
PHP:
preg_match('/^[a-zа-я0-9]$/ui', $name)
.
Почему?

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


Если изменить второй вариант

PHP:
preg_match('/[a-zа-я0-9]/ui', $name)
Работает.

Почему все таки первая работает вторая нет?
Если работает третий вариант, то начало и конец строки ('^' и '$') вообще не нужны?
Похожая тема
 

Absinthe

жожо
Они обе работают, но выполняют различные поиски.
Вторая требует, чтобы строка была в 1 символ.

preg_match('/[a-zа-я0-9]/ui', $name)
Работает.
И она снова выполняет другую задачу.

Смотри на третий параметр функции preg_match и выводи его для отладки.
 

KOLANICH

Новичок
вы приведите данные, на каких работают и на каких должны работать
я обычно использую для таких целей \w (в него ещё входит символ подчёркивания)
 

ivan453

Новичок
Они обе работают, но выполняют различные поиски.
Вторая требует, чтобы строка была в 1 символ.

И она снова выполняет другую задачу.

Смотри на третий параметр функции preg_match и выводи его для отладки.
Точно!
Строка из одного символа удовлетворяющая шаблону
PHP:
preg_match('/^[a-zа-я0-9]$/ui', $name,$matches)
...
print_r($matches);

Один из символов из строки удовлетворяет шаблону
PHP:
preg_match('/[a-zа-я0-9]/ui', $name,$matches)
вы приведите данные, на каких работают и на каких должны работать
я обычно использую для таких целей \w (в него ещё входит символ подчёркивания)
Буквы(лат+кир) и цифры
PHP:
preg_match('/^[a-zа-я0-9]+$/ui', $name,$matches)
Вроде так
 

Redjik

Джедай-мастер
KOLANICH
\w глючно работает, правда не припомню в каких условиях, лучше его не использовать
 

Absinthe

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

Ответы:
Вторая твоя регулярка требует строку длиной 1 символ.
Третья - просто совпадение одного символа в строке.
 
Сверху