Я пытаюсь найти слово в скобках и за их пределами. Как я могу это решить?

public static void main(String[] args) {
        String test = "id int(100) not null";
        Pattern pattern = Pattern.compile("\\w+(.*?)\\)", Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(test);
        if(matcher.find()) {
            System.out.println(matcher.group());
        }
    }

Это дает мне вывод id int(100). Однако мне нужен только int(100) в качестве вывода.

Еще примеры:

  • name varchar(100) not null должен выдать varchar(100).
  • showMenu tinyint(1) null default '0' должен выдать tinyint(1).
1
Srinivas Lakshman 5 Июл 2021 в 21:49

3 ответа

Лучший ответ
Pattern pattern = Pattern.compile("\\w+\\(.*?\\)", Pattern.CASE_INSENSITIVE);

Это то, что вам нужно. Соответствует символам слов, за которыми следует буквальная скобка, символы x, а затем закрывающая буквальная скобка

4
g00se 5 Июл 2021 в 18:55

С вашими показанными образцами попытки; вы можете попробовать следующее регулярное выражение. Это создаст 1 группу захвата, с помощью которой вы сможете получить совпадающее значение.

\b(\S+\([^)]*\))\s*\b

Онлайн-демонстрация для вышеуказанного регулярного выражения

<▪Explanation : Простое сопоставление границы слова \b, за которым следует группа захвата, которая сопоставляет все непробелы 1 или более вхождений до (приходит, затем сопоставляет все до 1-го возникновение) группы близкого захвата; за которым следует 0 или более пробелов, за которыми следует граница слова.

4
RavinderSingh13 5 Июл 2021 в 19:28

шаблон регулярного выражения, \w+\s*\(\s*.*\s*\) отвечает вашим требованиям.

Объяснение:

  • \w+: 1+ [a-zA-Z0-9_] символов
  • \s*: 0+ пробелов
  • \(: буквальный, (
  • .*: 0+ символов (любые)
  • \): буквальный, )
2
Arvind Kumar Avinash 5 Июл 2021 в 19:14