Regex статическая групповая проблема - PullRequest
1 голос
/ 29 июня 2011

У меня есть несколько строк в грубой форме:

[некоторое число с одной или двумя цифрами] [некоторый текст] [текст, который является ABC или BC] [некоторый текст]

String test = "12testABCtest";
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)");

Но это всегда дает мне "BC в 3-й группе вместо ABC. (Как и A в предыдущей группе)

У вас есть идеи, как это сделать?

спасибо,

1 Ответ

8 голосов
/ 29 июня 2011

Текст можно сделать не жадным:

Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*?)(A?BC)([\\w]*)");

Ссылка:

Reluctant quantifiers
-----------------------------
X??     X, once or not at all
X*?     X, zero or more times
X+?     X, one or more times

Источник: Pattern javadoc: неохотные квантификаторы

По сути: неохотные квантификаторы будут совпадать как можно меньше, в отличие от жадных квантификаторов по умолчанию, которые будут совпадать настолько, насколько это возможно.Вы получаете неохотный квантификатор, добавляя ? к другому квантификатору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...