首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sybase ASE中发现主键/唯一键:正则表达式和PHP

在Sybase ASE中发现主键/唯一键:正则表达式和PHP
EN

Stack Overflow用户
提问于 2011-12-27 02:07:52
回答 1查看 405关注 0票数 1

我从sp_helpconstraint iyas_grandtest那里得到这个信息。

代码语言:javascript
复制
constraint_name         definition
iyas_grand_2317208971   PRIMARY KEY INDEX ( id) : CLUSTERED
iyas_grand_2317208972   UNIQUE INDEX ( unik) : NONCLUSTERED
iyas_grand_2317208973   UNIQUE INDEX ( comp_unik1, comp_unik2) : NONCLUSTERED

我想提取:

  1. id,
  2. unik,
  3. comp_unik1和comp_unik2

如下所示:

id

  • $unique'iyas_grand_2317208972‘= unik

  • $unique'iyas_grand_2317208973’= comp_unik1

  • $unique'iyas_grand_2317208973‘= comp_unik1

注意,有时主键可以是主键索引( id,id2)。

我现在拥有的是缺陷(只检测到复合键的一个键,如果有_,则截断名称,即'comp_unik1‘变成'comp')。

代码语言:javascript
复制
$sql = sybase_query("sp_helpconstraint iyas_grandtest");        
while( $row = sybase_fetch_assoc($sql) ) {
            $txt= $row['definition'];
            $re1='(PRIMARY)';   # Word 1
            $re2='.*?'; # Non-greedy match on filler
            $re3='(?:[a-z][a-z]+)'; # Uninteresting: word
            $re4='.*?'; # Non-greedy match on filler
            $re5='(?:[a-z][a-z]+)'; # Uninteresting: word
            $re6='.*?'; # Non-greedy match on filler
            $re7='((?:[a-z][a-z]+))';   # Word 2

             if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7."/is", $txt, $matches))
            {
                $word =$matches[2][0];
                    $keys = explode(",", $word);
            }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-27 02:13:00

你可以试着匹配:

代码语言:javascript
复制
^\w+\s+(?:PRIMARY KEY|UNIQUE) INDEX \(([^)]+)\)

对于每一行,然后捕获$1,这是括号之间的内容,并使用explode,就像您已经在$1上做的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8640575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档