我从 sp_helpconstraint iyas_grandtest获取此信息。
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
我想提取:
如下:
请注意,有时PRIMARY键可能是PRIMARY KEY INDEX(id,id2)。
我现在所拥有的缺陷(只检测复合键的1个键,如果有_则截断名称,即'comp_unik1'变为'comp')。
$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);
}
}
答案 0 :(得分:1)
您可以尝试匹配:
^\w+\s+(?:PRIMARY KEY|UNIQUE) INDEX \(([^)]+)\)
对于每一行,然后捕获括号内的$1
,并使用explode
上的$1
。