2012-05-20 1 views
1

Простой вопрос о регулярных выражениях. У меняJava Regexp Matcher

String text = "foobar1foobar1"; 

И мне нужно, чтобы получить часть перед первым 1 (Foobar) Когда я сделать что-то вроде этого:

Pattern date_pattern = Pattern.compile("(.+)1"); 
Matcher matcher = date_pattern.matcher(text); 
matcher.group(1); 

Но я получаю "foobar1foobar".

ответ

7

Калькулятор + жадный, поэтому он соответствует максимально возможному. Вы должны указать reluctant version этого квантификатора +?; тогда ваш рисунок будет следующим:

(.+?)1 
2

Жадные и не жадные регулярные выражения. .+ жадный и сделает максимально возможное совпадение. Добавление ? сделает его неживым: .+?

Для вашего примера вам действительно не нужно регулярное выражение, но, на мой взгляд, это был всего лишь пример. Вместо этого вы могли бы сделать это с помощью, например:

String firstPart = text.substring(0, text.indexOf('1')) 

или даже (очень простой) регулярное выражение в расколе:

String firstPart = text.split("1")[0] 

И было бы легче читать, чем регулярное выражение для большинства людей. Будьте осторожны, если у вас нет «1».

1

Альтернатива может использовать функцию разделения:

String s="foobar1foobar2"; 
String[] splitted = s.split("1"); 

Строки вы ищете в расщепленном [0].

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

  • Нет связанных вопросов^_^