我正在尝试检查我的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,所以我一点也不迷路。
编辑。忽视 ';'在第一行的末尾。我正在程序中删除此字符。
答案 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