1
我從sp_helpconstraint iyas_grandtest獲取此信息。在Sybase ASE中發現主鍵/唯一鍵:正則表達式和PHP
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
我想提取:從小學
- ID,從獨特的
- 的Unik,
- comp_unik1和comp_unik2從獨特的
如下:
- $鍵[] = ID
- $獨特[ 'iyas_grand_2317208972'] [] =場Unik
- $獨特[ 'iyas_grand_2317208973'] [] = comp_unik1
- $獨特[ 'iyas_grand_2317208973'] [] = comp_unik1
請注意,有時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);
}
}
謝謝!你的答案和這個^ \ w + \ s +(?: PRIMARY KEY | UNIQUE)INDEX \((。*?)\)有什麼區別(結果) – Iyas 2011-12-28 08:30:17
是的。首先,你不會逃離外面的包袱,這意味着你不會有比賽。如果你確實逃避了它們,那麼你的正則表達式不會表現得很好,因爲你使用了一個懶惰的量詞,這意味着正則表達式引擎將不得不尋找_each_字符來查找關閉元素,而提供的正則表達式不必去做。 – fge 2011-12-28 09:59:01
再次感謝。你能建議任何書籍/教程/網站/以幫助提高正則表達式技能? – Iyas 2011-12-29 00:32:17