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)
但是不会正则,怎么也弄不出来,请高手帮我写一个正则表达式吧,谢谢了~~

解决方案 »

  1.   

    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 "));
      

  2.   

    谢谢楼上了,不过不对呀,表名不是固定的啊.
    拜托了,尽量写完整点吧,我代码也不会写,可能用到的代码如下,谢谢各位代码也帮我写出来吧String regEx="c.*";
    Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(tableStr);
    System.out.println(matcher.group(0));
      

  3.   

    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));
            }        
        }
    }
      

  4.   

    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"));
      

  5.   

    回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) 这些东西了~~
      

  6.   

    同样谢谢 dracularking 
    3楼朋友,能给我讲一下 String tableRegex = "(?i:create table)\\s+(.*?)\\s*\\("; 这个表达式是什么意思吗?我要是懂了这个,估计下面的自己也就写出来了
      

  7.   

    在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>
      

  8.   


    var  pattern = /create\stable\s(\w+)/; 
    应该为
    var  pattern = /create\stable\s(\w+)\s\(/; 
      

  9.   

    谢谢楼上各位~~翻了点资料,就差这个不懂了,(?i:create table)里的 ?i: 这是什么意思啊?
      

  10.   

    要求大小写匹配
    CASE_INSENSITIVE 
      

  11.   

    建议你看看http://java.sun.com/docs/books/tutorial/essential/regex/intro.html这个
    还是火龙果告诉我的!!
      

  12.   

    var  pattern = /(?:create table)\s(.*?)\s\(([^)][^.*$]+)\)/m;
    var a=sql.match(pattern);
    //alert(a[2]);
      a[1])可以取表名
      a[2])可以取表字段 属性
      

  13.   

    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)"这种还是第一次见来。 初学,不知道理解得对不对!
      

  14.   

    哦 好像理解得不太对, var  pattern = /(?!:create table)\s(.*?)\s\(([^)][^.*$]+)\)/im,编译不过去。
      

  15.   

    更正:CASE_INSENSITIVE 用?i 是表示的大小不敏感,即就是忽略大小写,不好意思,呵呵
      

  16.   

    to: 15楼你的理解完全正确。不过你在 16 楼的 JavaScript 中不支持这种表示,JavaScript 使用后面的“i”匹配参数来指定的。