谁能帮我写一个正则表达式,匹配数据表名,初学正则,谢谢了

zhl1015 2008-03-20 10:18:09
create table LP_DICT_EST_OPTION (
ID VARCHAR2(32) not null,
CODE_JY VARCHAR2(20),
NAME_JY VARCHAR2(80),
REMARK VARCHAR2(1000),
DEL_FLAG VARCHAR2(2),
CREATED_BY VARCHAR2(32),
CREATED_DATE DATE,
UPDATED_BY VARCHAR2(32),
UPDATED_DATE DATE,
constraint PK_LP_DICT_EST_OPTION primary key (ID)
)

这是由PowerDesigner生出来的建表语句,我想把表名:LP_DICT_EST_OPTION匹配出来

还想匹配字段的定义:
ID VARCHAR2(32) not null,
CODE_JY VARCHAR2(20),
NAME_JY VARCHAR2(80),
REMARK VARCHAR2(1000),
DEL_FLAG VARCHAR2(2),
CREATED_BY VARCHAR2(32),
CREATED_DATE DATE,
UPDATED_BY VARCHAR2(32),
UPDATED_DATE DATE,
constraint PK_LP_DICT_EST_OPTION primary key (ID)


但是不会正则,怎么也弄不出来,请高手帮我写一个正则表达式吧,谢谢了~~
...全文
208 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
J寻 2008-03-20
  • 打赏
  • 举报
回复
看不懂
zhl1015 2008-03-20
  • 打赏
  • 举报
回复
同样谢谢 dracularking


3楼朋友,能给我讲一下 String tableRegex = "(?i:create table)\\s+(.*?)\\s*\\("; 这个表达式是什么意思吗?

我要是懂了这个,估计下面的自己也就写出来了
zhl1015 2008-03-20
  • 打赏
  • 举报
回复
回3楼:就是取得 create table ( ......... ) 之间的内容,就是:

ID VARCHAR2(32) not null,
CODE_JY VARCHAR2(20),
NAME_JY VARCHAR2(80),
REMARK VARCHAR2(1000),
DEL_FLAG VARCHAR2(2),
CREATED_BY VARCHAR2(32),
CREATED_DATE DATE,
UPDATED_BY VARCHAR2(32),
UPDATED_DATE DATE,
constraint PK_LP_DICT_EST_OPTION primary key (ID)

这些东西了~~
dracularking 2008-03-20
  • 打赏
  • 举报
回复
name不固定那也类似的

String input = "create table LP_DICT_EST_OPTION  ( \n"+
"ID VARCHAR2(32) not null,";
String regex = "(?s)\\s+table\\s+\\w+(?=\\s+\\()";
System.out.println(input.replaceAll(regex, " table YourDesiredTableName"));
  • 打赏
  • 举报
回复
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) {
String sql = "create table LP_DICT_EST_OPTION (\n" +
" ID VARCHAR2(32) not null,\n" +
" CODE_JY VARCHAR2(20), \n" +
" NAME_JY VARCHAR2(80), \n" +
" REMARK VARCHAR2(1000), \n" +
" DEL_FLAG VARCHAR2(2), \n" +
" CREATED_BY VARCHAR2(32), \n" +
" CREATED_DATE DATE, \n" +
" UPDATED_BY VARCHAR2(32),\n" +
" UPDATED_DATE DATE, \n" +
" constraint PK_LP_DICT_EST_OPTION primary key (ID)\n" +
")\n";
String tableRegex = "(?i:create table)\\s+(.*?)\\s*\\(";
Pattern pattern = Pattern.compile(tableRegex);
Matcher matcher = pattern.matcher(sql);
while(matcher.find()) {
System.out.println("Tablename: " + matcher.group(1));
}
}
}
  • 打赏
  • 举报
回复
说实在的,我只看懂一个表名匹配,至于字段的匹配我没看懂,到底要取什么呢?
zhl1015 2008-03-20
  • 打赏
  • 举报
回复
谢谢楼上了,不过不对呀,表名不是固定的啊.


拜托了,尽量写完整点吧,我代码也不会写,可能用到的代码如下,谢谢各位代码也帮我写出来吧

String regEx="c.*";
Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(tableStr);
System.out.println(matcher.group(0));
dracularking 2008-03-20
  • 打赏
  • 举报
回复
String input = "create table LP_DICT_EST_OPTION  ( \n"+
"ID VARCHAR2(32) not null,";
String regex = "(?s)\\s+LP_DICT_EST_OPTION\\s+";
System.out.println(input.replaceAll(regex, " desired "));
  • 打赏
  • 举报
回复
to: 15楼你的理解完全正确。

不过你在 16 楼的 JavaScript 中不支持这种表示,JavaScript 使用后面的“i”匹配参数来指定的。
hmsuccess 2008-03-20
  • 打赏
  • 举报
回复
更正:CASE_INSENSITIVE 用?i 是表示的大小不敏感,即就是忽略大小写,不好意思,呵呵
xiaoheixiaobai 2008-03-20
  • 打赏
  • 举报
回复
哦 好像理解得不太对, var pattern = /(?!:create table)\s(.*?)\s\(([^)][^.*$]+)\)/im,编译不过去。
xiaoheixiaobai 2008-03-20
  • 打赏
  • 举报
回复
13楼提供的 网址http://java.sun.com/docs/books/tutorial/essential/regex/intro.html 文档中
Special constructs (non-capturing)
(?:X) X, as a non-capturing group
(?idmsux-idmsux) Nothing, but turns match flags i d m s u x on - off
(?idmsux-idmsux:X) X, as a non-capturing group with the given flags i d m s u x on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(?>X) X, as an independent, non-capturing group

(?idmsux-idmsux:X) X, as a non-capturing group with the given flags i d m s u x on - off 应该就是对应
"(?i:create table)" 里面的i表示忽略大小写,整个表示:create table忽略大小写,然后按其分组。
分组的我见过"(?:create table)",而"(?i:create table)"这种还是第一次见来。

初学,不知道理解得对不对!
xiaoheixiaobai 2008-03-20
  • 打赏
  • 举报
回复
var pattern = /(?:create table)\s(.*?)\s\(([^)][^.*$]+)\)/m;
var a=sql.match(pattern);
//alert(a[2]);
a[1])可以取表名
a[2])可以取表字段 属性

hmsuccess 2008-03-20
  • 打赏
  • 举报
回复
建议你看看http://java.sun.com/docs/books/tutorial/essential/regex/intro.html这个
还是火龙果告诉我的!!
hmsuccess 2008-03-20
  • 打赏
  • 举报
回复
要求大小写匹配
CASE_INSENSITIVE
zhl1015 2008-03-20
  • 打赏
  • 举报
回复
谢谢楼上各位~~

翻了点资料,就差这个不懂了,(?i:create table)里的 ?i: 这是什么意思啊?
xiaoheixiaobai 2008-03-20
  • 打赏
  • 举报
回复

var pattern = /create\stable\s(\w+)/;
应该为
var pattern = /create\stable\s(\w+)\s\(/;
xiaoheixiaobai 2008-03-20
  • 打赏
  • 举报
回复
在javascrip中取表明
<SCRIPT type="text/javascript">
var sql= "create table LP_DICT_EST_OPTION (\n" +
" ID VARCHAR2(32) not null,\n" +
" CODE_JY VARCHAR2(20), \n" +
" NAME_JY VARCHAR2(80), \n" +
" REMARK VARCHAR2(1000), \n" +
" DEL_FLAG VARCHAR2(2), \n" +
" CREATED_BY VARCHAR2(32), \n" +
" CREATED_DATE DATE, \n" +
" UPDATED_BY VARCHAR2(32),\n" +
" UPDATED_DATE DATE, \n" +
" constraint PK_LP_DICT_EST_OPTION primary key (ID)\n" +
")\n";
var pattern = /create\stable\s(\w+)/;

var a=sql.match(pattern);
alert(a[1]);
</SCRIPT>

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧