Regex, чтобы получить значение - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу найти регулярное выражение, чтобы найти значение originaldbname в следующем запросе, где tablename будет передано в качестве аргумента.Является ли это возможным.Перепробовал много вещей, но теперь работает.

REPLACE WITH viewdbname.tablename as locking row for access select * from originaldbname.tablename

.

edit: я запускаю нижеприведенную программу со значением оригинала.

String query = "REPLACE WITH viewdbname.tablename as locking row for access select * from original.tablename";
Pattern p=Pattern.compile("from\\s+(?:\\w+\\.)*(\\w+)($|\\s+[WHERE,JOIN,START\\s+WITH,ORDER\\s+BY,GROUP\\s+BY])",Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(query);
while(m.find()) System.out.println(m.group(1));
//But it is returning me tablename... I want to get "original" as output.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если вы просто хотите «оригинал», это будет делать:

    String query = "REPLACE WITH viewdbname.tablename as locking row for access select * from original.tablename";
    Pattern p = Pattern.compile("from\\s+(.+)\\.");

    Matcher m = p.matcher(query);
    if (m.find()) {
        System.out.println(m.group(1));
    }
0 голосов
/ 11 декабря 2018

у вас было (?:\\w+\\.)*(\\w+), где (?: ) - несоответствующая группа, а ваша первая подходящая группа - (\\w+) после точки ..

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

Pattern.compile("from\\s+(?:(\\w+)\\.)?\\w+",Pattern.CASE_INSENSITIVE);

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