2014-09-24 4 views
1

Я пишу regex, чтобы захватить параметры действия REST URL. Я написал следующее:RegEx: Параметры действия захвата

(?:\/folder)?\/?([a-zA-Z0-9]+)+ 

Он отлично работает для /folder/one/two/three, и я получаю один, два и три в качестве результата. Если я попробую только /folder/ или /folder, я получаю папку как результат, но я не хочу ее снимать. Я ожидаю пустой результат.

Как я могу отрицать это целое слово, в данном случае?

+0

что бы вы хотели видеть на '/ somethingelse/один/два/three' и'/folderandmore/one/two/three' –

ответ

3

Здесь вам нужно использовать PCRE глагол (*SKIP)(*F),

(?:^(?:\/folder\/?)|^.*$)(*SKIP)(*F)|([a-zA-Z0-9]+) 

DEMO

+0

Почти у нас есть спички, теперь мне нужны слова. PHP 'preg_match_all()' вернет их в массив. – bodruk

+0

yep. 'preg_match_all()' вернет совпадения в массиве. у тебя есть сомнения? –

+0

Да, он считается совпадением, но не показывает захваченные слова. Проверьте свой пример.Он соответствует словам (синий), но не фиксирует их (зеленый). – bodruk

1

Это потому, что вы захватываете папку

попробовать

\/folder\/?([a-zA-Z0-9]+)+ 
+0

Это будет захватывать только первое слово * one * для '/ folder/one/two/three'. Я [изменил ваше предложение] (http://regex101.com/r/nK9zO1/2) в '\/folder \/| ([a-zA-Z0-9] +) +' и отлично поработал для меня , Спасибо @ant! – bodruk

+0

Drux, ваше новое предложение, похоже, не работает для '/ folder'. Он по-прежнему захватывает папку слов. –

+0

Да, вы правы @B. Далтон! И он захватывает пробел для '/ folder/one/two/three'. – bodruk

1
(?:\/folder)?\/?|([a-zA-Z0-9]+)+ 

Попробуйте this.See демо.

http://regex101.com/r/zR2tR4/10

+0

Да! Спасибо @vks, это то, о чем я говорю. :) – bodruk

+0

он захватывает пробелы! Можем ли мы их устранить? – bodruk

+0

@drux не является.see demo link. есть только 3 матча. – vks

Смежные вопросы