регулярка: любое слово кроме указанных в списке

Sokil.Dmytro

Новичок
регулярка: любое слово кроме указанных в списке

вроде бы просто но не могу найти нигде примера

надо составить шаблон, которому соответствуют все слова кроме тех, которые будут перечислены.

обратная задача простая:

preg_match('/word1|word2/i', 'word1'); // TRUE

а как в шаблон добавить условие НЕ - я не знаю
 

dimagolov

Новичок
а зачем тебе именно в шаблоне указывать? делай отрицание на результат
 

Sokil.Dmytro

Новичок
та взялся в зенде поковыряться. Есть роутер

new Zend_Controller_Router_Route(
'profile/:username',
array(
'controller' => 'profile',
'action' => 'index'
)

который перезаписывает все УРЛ типа http://site/profile/some_user_name в http://site/profile/index.

Хотелось бы сделать, чтобы перезаписывались все УРЛы кроме нескольких екшнов типа /profile/register ...

Условия указываются третим параметром в роуте:

new Zend_Controller_Router_Route(
'profile/:username',
array(
'controller' => 'profile',
'action' => 'index'
),
array('username' => '{НЕ}register|recover|confirm')
)

но я не знаю как сделать регулярку, пропускающую все кроме указанного списка
 

Beavis

Banned
sakon
он же специально жирным выделил, что должно получиться!
 

Sokil.Dmytro

Новичок
ну вы блин даете :) вопрос для меня больше не в зенде а в том что я не могу сообразить, как регуляркой отрицание списка сделать. вроде ж элементарно должно быть

хоть бери да роутер переписывай
 

Sokil.Dmytro

Новичок
вьехал

работающая конструкция
PHP:
echo preg_match('/^(?!register|confirm)/','register');
работать отказывается с долларом в конце, а зенд автоматом втискивает шаблон в рамки $this->_regexDelimiter . '^' . $this->_parts[$pos] . '$' . $this->_regexDelimiter . 'iu'

:(

кароч решение получилось такое '/^(?!register$|confirm$|recover$).+$/'
 
Сверху