Java中的基本RE

时间:2018-12-08 15:35:10

标签: java regex

我正在尝试检查我的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 :(得分:0)

RE中的方括号定义一个“ class”(在RE中不是Java类)。您有很多方法。括号(圆括号)用于capture部分匹配,如果您只对匹配模式的整个字符串感兴趣,则不需要。

对于您的情况,我可能会做类似的事情:

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

其中

  • \w+-“单词字符”的非零长度(字母,数字或下划线)
  • \(\)-括号完全匹配
  • (\, \w+)*-零个或多个用逗号隔开的单词与上一个单词
  • ^$-字符串的开头和结尾

答案 1 :(得分:0)

如果该字符串是创建表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*|\)))+$

您可以在线查看here