2013-04-07 3 views
0

Представьте меня есть строкиИзготовление + неживое?

abcD 

, и я хочу, чтобы извлечь abc из него. Я думал об использовании

^(.+)D$ 

однако затем в соответствие group1 не только abc, но abcD входит - как сделать .+ менее жадными, так D не входит в группу? Я знаю, что могу использовать [^D]+, но это действительно единственный способ?

Извините, это был уменьшенный плохой тестовый чехол. Посмотрите на данном примере (Java):

Pattern pattern = Pattern.compile("^(\\{(.+?)\\})?$"); 
Matcher matcher = pattern.matcher("{a}{b}"); 

System.out.println(matcher.matches()); // true 

Почему этот матч? Не должно ли регулярное выражение просто указывать { и один } в строке? Я хочу только такие вещи, как {< not } >}.

+0

ли вы имеете в виду '^ (. +) $ D'? И какой из многих вариантов регулярных выражений вы используете? –

+0

Это не '.', это жадный, а скорее' + '. –

+0

@KeithThompson: Конечно, спасибо! Натан, хорошо, спасибо, но тогда какая-нибудь идея о том, как изменить это поведение? –

ответ

2

Чтобы сделать квантор менее жадным, вы добавляете ? после квантора:

^(.+?)D$ 

Это зависит, однако, от языка или текстового редактора. Различные двигатели регулярных выражений поддерживают разные функциональные возможности.

+0

Спасибо, к сожалению, мой образец был плохим, теперь приведен полный образец, где я чувствую, что '. +?' Жадный, хотя это не должно быть - не знаю, что я делаю неправильно? Благодаря! –

0

«D» не входит в первую группу, он включен в полное соответствие шаблону.

Первая группа - «abc».

Вы можете увидеть демонстрацию этого на http://rubular.com/r/oSnF17Jd39

+0

Вы правы, это была моя ошибка и неправильный образец - добавлен новый ;-) –

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