[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с регулярным выражением
HErATuB
Доброе время суток. Вот что то уже не как не магу сообразить. Есть строка и 2 регулярные выражения:

$arr = array();
$text='/part/13/name.html';
$reg1='\/(part\/(1|7))|(page\/(6|11))\/[0-9a-z_\.]*.html';
$reg2='\/(part\/(5|11|13|12))|(page\/(8|9|14))\/[0-9a-z_\.]*.html';
if(preg_match('/'.$reg1.'/i',$text)){
$arr[] = 'reg_1';
}
if(preg_match('/'.$reg2.'/i',$text)){
$arr[] = 'reg_2';
}

В результате как 1 так и 2-е попало в массиве. Не как не магу понять почему туда попал 1 совпадение
curious
я не разбираюсь в регулярках, но есть предположение....
(1|7) значица 1 или 7...Я полагаю что именно из-за 1 $reg1 прокатывает...Также полагаю что 1 или 7 рассматривается как тип - строка, поэтому если можно задать (1 или 7) - как цифра(т.е. рассматривать как цифры), то стоит попробовать...

PS: Просто предположение...
Placido
Потому что
'\/(part\/(1|7))|(page\/(6|11))\/[0-9a-z_\.]*.html'

означает
'\/(part\/(1|7))' или '(page\/(6|11))\/[0-9a-z_\.]*.html'

Соответственно,
'\/(part\/(5|11|13|12))|(page\/(8|9|14))\/[0-9a-z_\.]*.html'

означает
'\/(part\/(5|11|13|12))' или '(page\/(8|9|14))\/[0-9a-z_\.]*.html'

А текст в переменной $text удовлетворяет обеим регуляркам.
Чтобы регулярки работали правильно, часть "или" нужно сгруппировать (фактически это значит добавить скобки).
Цитата
'\/((part\/(1|7))|(page\/(6|11)))\/[0-9a-z_\.]*.html'
HErATuB
А как тогда написать, что бы разделить part и page, а они в свою очередь еще на разные разделы

(part\/(5 'или' 11 'или' 13 'или' 12)) 'или' (page\/(8 'или' 9 'или' 14))
HErATuB
Все разобрался. Спасибо.
Быстрый ответ:

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