Группы регулярного выражения не захватывают должным образомJAVA

Программисты JAVA общаются здесь
Anonymous
Группы регулярного выражения не захватывают должным образом

Сообщение Anonymous »

У меня есть следующее выражение < /p>

Код: Выделить всё

String formula7 = "(^TBC10.Actual.Value_ == \"Final\" ? ^FN10101.Actual.Value_ : ^INT805.Consensus.Value_) - (^PH2003 + ^PH2005 + ^PH2011 + ^PH2010 + ^PH2837 + ^PH2838 + ^PH2839 + ^PH2006 + ^PH2089)"
< /code>
Теперь я хочу извлечь группы из этой строки, например, следующая < /p>
// First bracket
1. (^TBC10.Actual.Value_ == "Final" ? ^FN10101.Actual.Value_ : ^INT805.Consensus.Value_)

// Condition
2. TBC10.Actual.Value_ == "Final"

// Condition left side
3. TBC10.Actual.Value_

// Condition right side
4. Final

// Trure condition value
5. FN10101.Actual.Value_

// False condition value
6. INT805.Consensus.Value_

// Other part
7. - (^PH2003 + ^PH2005 + ^PH2011 + ^PH2010 + ^PH2837 + ^PH2838 + ^PH2839 + ^PH2006 + ^PH2089)
< /code>
Чтобы достичь этого, я сделал следующее регулярное выражение < /p>
// start with any characters. Then space. But it is optional. Then == sign. Then space. But it is optional.
// Then contain any characters. Then space. But it is optional. Then contains ?. Then space. But it is
// optional. Then contain any characters. Then space. But it is optional. Then contains : Then space. But it
// is optional. Then contain any characters. Then any characters. But it is optional
public static final String CONDITION_REGEX = "((((.*)\\s?==\\s?(.*))\\s?\\?\\s?(.*)\\s?:\\s?(.*))(.*)?)";
public static final Pattern CONDITION_PATTERN = Pattern.compile(CONDITION_REGEX);
< /code>
Но когда я запускаю его, я получаю следующий выход < /p>
// replace caret(^), double comma(") and any white space from the string
String formula = formula7.replaceAll("[\\^\"\\s]", "");

Matcher matcher = CONDITION_PATTERN.matcher(formula);
if(matcher.matches()) {

// (TBC10.Actual.Value_==Final?FN10101.Actual.Value_:INT805.Consensus.Value_)-(PH2003+PH2005+PH2011+PH2010+PH2837+PH2838+PH2839+PH2006+PH2089)
String group1 = matcher.group(1);

// (TBC10.Actual.Value_==Final?FN10101.Actual.Value_:INT805.Consensus.Value_)-(PH2003+PH2005+PH2011+PH2010+PH2837+PH2838+PH2839+PH2006+PH2089)
String condition = matcher.group(2);

// (TBC10.Actual.Value_==Final
String conditionLeftSide = matcher.group(3);

// (TBC10.Actual.Value_
String conditionRightSide = matcher.group(4);

// Final
String trueCondition = matcher.group(5);

// FN10101.Actual.Value_
String condition6 = matcher.group(6);

// INT805.Consensus.Value_)-(PH2003+PH2005+PH2011+PH2010+PH2837+PH2838+PH2839+PH2006+PH2089)
String condition7 = matcher.group(7);

// ""
String condition8 = matcher.group(8);
}
< /code>
Что я делаю неправильно, и как я могу исправить Rejex для достижения результата? Я думаю () 
представлять группы в Rejex. И для каждой группы я использовал ()
спасибо

Подробнее здесь: https://stackoverflow.com/questions/795 ... g-properly

Вернуться в «JAVA»