私はこのコードを持っている:preg_match_allの正規表現でサブパターンの結果を修正するにはどうすればよいですか?
$query = 'CREATE table "msg" ("myid" INT(10) UNSIGNED , "user" INT(10) UNSIGNED , "new_mes" SMALLINT(5) UNSIGNED , "total_mes" MEDIUMINT(8) UNSIGNED , "lastdate" DATETIME , PRIMARY KEY ("ids"), KEY ("lastdate"))';
私はこのsubpaternsを使用して主キーとキーを取得しようとしています:
preg_match_all('/(?:\WPRIMARY\W*KEY\W?\()(?P<PRIMARY_KEY>[^)]+)|'.
'(?:\W*KEY\W?\()(?P<KEY>[^)]+)/i',$query,$results);
$primary_key = isset($results['PRIMARY_KEY'][0]) ? $results['PRIMARY_KEY'][0] : '';
$key = isset($results['KEY'][0]) ? $results['KEY'][0] : '';
print_r($results);
私はこの出力を得る:
Array
(
[0] => Array
(
[0] => PRIMARY KEY ("ids"
[1] =>),KEY ("lastdate"
)
[PRIMARY_KEY] => Array
(
[0] => "ids"
[1] =>
)
[1] => Array
(
[0] => "ids"
[1] =>
)
[KEY] => Array
(
[0] =>
[1] => "lastdate"
)
[2] => Array
(
[0] =>
[1] => "lastdate"
)
)
私が探しました二重引用符で囲まれた単語。結果はほぼ見いだされますが、私は最初のインデックス[0]で2つの単語 "ids"と "lastdate"を取得することをお勧めします。最初の単語が最初のインデックスに配置されているのに対して、2番目のインデックスが2番目のインデックスに配置されている理由を説明できますか?なぜ、2番目と1番目のインデックスに空の文字列があるのですか?
インデックス0の両方の単語を取得する方法はありますか?コードを単純化するだけです。
名前付きキャプチャグループが必要ですか?あなたは単に ''(?| \ WPRIMARY \ W * KEY \ W?\((^))+)| \ W * KEY \ W?\(([^)] +)) '](https: //regex101.com/r/kG6nE6/1)。 [このデモ](http://ideone.com/sBLOYZ)を参照してください。 –
私はそれらを必要としないことを知っています。私は物事を明確にするためにそれらを作成しました。 –