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
私が抽出したい:PRIMARYから
- ID、UNIQUEから
- UNIK、
- comp_unik1とcomp_unik2 UNIQUE
から次のように:
-
を
- $キー[] = 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
はい。 1つは、あなたは外側の括弧を逃れることはできません。これはあなたがマッチしないことを意味します。そして、あなたがそれらをエスケープするならば、あなたの正規表現は、正規表現エンジンが最後の括弧を見つけるために_each_文字を先読みする必要があることを意味するので、正規表現は実行されません。それを行う。 – fge
もう一度ありがとうございます。あなたはregexのスキルを向上させるために、本/チュートリアル/ Web /を提案できますか? – Iyas