Отсутствует последняя закрывающая скобка в регулярном выражении - PullRequest
0 голосов
/ 14 февраля 2012

из строки ниже

lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')||lookup('CONTACT','CON_LKP','LKP_TAB2.OBJECTIVE')||$country_cd$

для извлечения функции поиска, которую я использую

Pattern p = Pattern.compile("(lookup\\([^)]*)\\)");

Но эта функция возвращает совпадение, исключая последнюю заключительную скобку ')'. Как его возвращение

lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD'

Где я совершаю ошибку. Кстати, я знаю очень мало в регулярном выражении. Так что мой вопрос может быть очень глупым.

1 Ответ

1 голос
/ 14 февраля 2012

Просто измените строку на

Pattern p = Pattern.compile("(lookup\\([^)]*\\))");

Вам также необходимо включить конечную скобку \\) в соответствующую группу.

Код:

shadyabhi@archlinux /tmp $ cat RegExpTest.java
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExpTest {
    public static void main(String[] args) {

        String str = "lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')||lookup('CONTACT','CON_LKP','LKP_TAB2.OBJECTIVE')||$country_cd$";

        String p = "(lookup\\([^)]*\\))";
        Pattern pattern = Pattern.compile(p);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()){
            System.out.println(matcher.group(1));
        }
    }
}
shadyabhi@archlinux /tmp $ javac RegExpTest.java 
shadyabhi@archlinux /tmp $ java RegExpTest 
lookup('CONTACT','CON_LKP','LKP_TAB1.COUNTRY_CD')
shadyabhi@archlinux /tmp $
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...