[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите понять поведения регулярки.
J1upuk
Почему
#0|[2-9]+1$#u
пропускает число 20, в то время как
#(0|[2-9])+1$#u
не пропускает. Конечно нужно писать
#[02-9]+1$#u
, но я хочу разобраться. По сути не 1 вариант не 2 не должны пропускать только потому, что последний символ должен быть 1 (единица), а у числа 20 последний 0 (ноль), в чём загвоздка?
Invis1ble
куда пропускает?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

J1upuk
preg_match(); возвращает TRUE при входящей строке '20' - пропускает число 20.
Invis1ble
#0|[2-9]+1$#u // присутствует 0 или число, состоящее из 2-9 и оканчивающееся на 1

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

J1upuk
В том то и дело, что оканчивающееся на 1, число 20 оканчивается на 0, но функция возвращает TRUE, почему?
SerginhoLD
Invis1ble
или нужно было красным выделить biggrin.gif

_____________
"internet explorer всех правильней отображает страницы" ©
J1upuk
SerginhoLD
и что бы это поменяло, всё верно, строка заканчивается на 1(единицу) которой предшествует 1(один) или более 0(нулей) ИЛИ цифр в диапазоне от 2 до 9 (2,3,4,5,6,7,8,9). 20 то тут каким боком, она на 0 заканчивается а не на 1 что я не так понимаю? smile.gif

Я понял только то, что квантификатор + распространяется только на диапазон от 2 до 9, даже если это так, то проходит условие [2-9] (ибо 20), но потом то всё равно 0, а не 1. Тем более чётко указан конец строки.
Invis1ble
единица относится только ко второму "или"

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

J1upuk
То есть, как я понял при использовании | нужно всегда группировать () ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.