2013-11-13 3 views
0

Я знаю, что это кажется распространенным вопросом, но не может избавиться от моей проблемы. Мне нужно регулярное выражение, которое соответствует только строке, которая не начинается с указанного набора слов и окружена /. Пример:java, строка регулярных выражений, не содержащая набор слов между/

/harry/white 
/sebastian/red 
/tom/black 
/tomas/green 

Я не хочу строки, начинающиеся с/гарри/и/Том /, так что я ожидаю

/harry/white  NO 
/sebastian/red YES 
/tom/black  NO 
/tomas/green  YES 

1) ^/(?!(harry|tom)).* doesn't match /tomas/green 
2) ^/(?!(harry|tom))/.* matchs nothing 
3) ^/((harry|tom))/.*  matchs the opposite 

Что такое правильный регулярное выражение? Я бы очень признателен, если кто-нибудь объяснит мне, почему 1 и 2 ошибаются. Пожалуйста, не обвиняйте меня :) Спасибо.

+0

Может ли строка заканчиваться на '/' like '/ sebastian/red /' – abc123

+0

@ abc123 да, это возможно. – holap

ответ

1

Try:

^(?!/(harry|tom)/).* 

Почему номер 1 является неправильным: опережения должны убедиться, что harry или tom следует косой черта.

Почему номер 2 неверен: игнорировать взгляд; обратите внимание, что шаблон пытается совместить две слэши в начале строки.

+0

Хороший ответ с хорошим объяснением +1 – anubhava

+0

@pobrelkey ​​Спасибо! Теперь взгляд немного более ясен. – holap

2

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

^/(?!(harry|tom)/).* 

Не добавлять слэш, будет соответствовать tom в tomas, а отрицательный look- впереди не удовлетворит.

+0

wow Rohit вернулся и как: P, +1 – anubhava

+0

@anubhava Ах! Спасибо за приветствие :) –

+0

@RohitJain Спасибо! – holap

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