Я боюсь понять простой regex
. Я googled вокруг. как-то это не поражает меня.regex соответствующий шаблон в java
Вот метод:
public static void testMethod(){
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println("Found value: " + m.group(0));
System.out.println("Found value: " + m.group(1));
System.out.println("Found value: " + m.group(2));
System.out.println("Found value: " + m.group(3));
}
}
Вот результат:
Я ожидал group(2)
для печати 3000
. но почему он печатает только 0
.
См. [* Остерегайтесь жадности! *] (Http://www.regular-expressions.info/repeat.html#greedy) и [* Жадная ловушка *] (http: //www.rexegg. com/regex-quantifiers.html # greedytrap) для подробного описания того, как backtracking работает с жадными и ленивыми кванторами. Я просто попытался вкратце объяснить корень проблемы и один возможный способ ее исправления. Разумеется, в зависимости от того, что вам нужно, вы можете использовать отрицательный класс символов (например, '[^ 0-9] *') или умеренный токен. –