Основные RE в Java - PullRequest
       2

Основные RE в Java

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

Я пытаюсь проверить, выглядит ли моя строка в Java примерно так:

create table people (name, age, ...);

Я создал это регулярное выражение:

Pattern re = Pattern.compile("create table [a-zA-Z0-9]+ [([[a-zA-Z0-9]+, ]+)]");

Но для

    String s = "create table tablename (columnname, column) (column)";
    Matcher m = re.matcher(s);
    if (m.find()) {
        System.out.println("Right");
    } else {
        System.out.println("Wrong");
    }

Я всегда прав.Кто-нибудь может мне помочь, пожалуйста?Я только начал изучать RE, поэтому я немного растерялся.

редактировать.игнорировать ';'в конце первой строки.Я удаляю этот символ внутри моей программы.

Ответы [ 2 ]

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

Если строка является видом создаваемой таблицы sql, то она должна поддерживать пробелы и не пробелы, например:

create  table  people(name ,   age, addres,phone,mail, ...);

Так что вы должны использовать регулярное выражение, поддерживающее допустимые запросы SQL, это поможет вам:

^create\s*table\s*[a-zA-Z0-9]+\s*\((?:\s*[a-zA-Z0-9]+(?:\s*,\s*|\)))+$

Вы можете проверить онлайн здесь

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

Квадратная скобка в RE определяет " класс " (в терминах RE, а не в классе Java).У вас есть путь ко многим из них.Скобки (круглые скобки) используются для захвата частичных совпадений, которые вам не нужны, если вас интересует только строка, совпадающая с шаблоном.

В вашем случае я бы, вероятно, сделал что-тонапример:

"^create table \w+ \(\w+(\, \w+)*\)$"

, где

  • \w+ - ненулевая длина «словесных символов» (буквы, цифры или подчеркивания)
  • \( an \) - круглые скобки, точно совпадающие
  • (\, \w+)* - ноль или более слов, разделенных запятыми от предыдущего слова
  • ^ и $ - начало и конецстроки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...