2017-01-17 3 views
0

が、私は別の括弧以外括弧内のカンマで分割したいブレースは、内部ブレース

$q1 ="CREATE TABLE notes(id INTEGER,code DECIMAL (4,2),PRIMARY KEY (id))"; 
$q2 ="CREATE TABLE notes(id INTEGER,code TEXT)"; 

$r = preg_split('/\([^()]*\)(*SKIP)(*F)|[()]|,/', $q1);//$q1 splitted but $q2 no 
print_r($r); 

最終的な結果は次のようになります。

$ 1四半期について:

$ Q2のための
array(
     0 => id INTEGER 
     1 => code DECIMAL (4,2) 
     2 => PRIMARY KEY (id) 
    ); 

array(
     0 => id INTEGER 
     1 => code TEXT 
    ); 
+0

質問には誰も回答できません。あまりにも曖昧です。 – McStuffins

+0

私は中括弧の内側にSQLを分割したいです...それだけです! – edd

+0

あなたの質問は明確ではありません... AFAIK、この文字列をコンマで区切る必要がありますが、 'DECIMAL(4,2)'コードはそのままですか? – Pipe

答えて

1

コード:(PHP Demo

$sqls = array(
    "CREATE TABLE notes(id INTEGER,code DECIMAL (4,2),PRIMARY KEY (id))", 
    "CREATE TABLE notes(id INTEGER,code TEXT)" 
); 

foreach($sqls as $sql){ 
    if(preg_match_all("/(?:^.+?\(|,)(?:\K[\w ]+(?:\([\S].*?\))?)/", $sql,$matches)){ 
     echo "<pre>"; 
      var_export($matches[0]); 
     echo "</pre>"; 
    } 
} 

出力:

// first $matches... 
array(
    0 => 'id INTEGER', 
    1 => 'code DECIMAL (4,2)', 
    2 => 'PRIMARY KEY (id)' 
) 
// second $matches... 
array(
    0 => 'id INTEGER', 
    1 => 'code TEXT' 
) 

正規表現内訳(Regex Demo

(?:^.+?\(|,)   #group everything from the start to 1st parenthesis or a comma 
(?:\K[\w ]+   #\K means "only retain text from this point", group words and spaces 
    (?:\([\S].*?\))? #optionally group parenthetical text 
) 

\Kを使用して、キャプチャグループの排除を可能とpreg_match_all最初サブアレイ内の所望の文字列(文字列全体)を返します。利点は、キャプチャグループを持つアレイの半分のサイズの$matchesアレイです。

+0

@edd私の答えが満足すれば、緑のダニを授与してください。そうでなければ、修正すべきものが何であるかを説明するコメントを私に残してください。 – mickmackusa

0

埋め込ま括弧は数字だけが含まれている場合、これは仕事をしていません:

$sqls = array(
"CREATE TABLE notes(id INTEGER,code DECIMAL (4,2),PRIMARY KEY (id))", 
"CREATE TABLE notes(id INTEGER,code TEXT)" 
); 

foreach ($sqls as $sql) { 
    $arr = preg_split("/(?<!\d)[(),](?!\d)/", $sql); 
    print_r($arr); 
} 

出力:

Array 
(
    [0] => CREATE TABLE notes 
    [1] => id INTEGER 
    [2] => code DECIMAL (4,2) 
    [3] => PRIMARY KEY 
    [4] => id 
    [5] => 
    [6] => 
) 
Array 
(
    [0] => CREATE TABLE notes 
    [1] => id INTEGER 
    [2] => code TEXT 
    [3] => 
) 
+1

あなたはこの理想に近づいています – edd

+0

@edd:それは動作するのですか? – Toto

+0

これは部分的な答えですが、私はこのアイデアを取り入れようとしています(あなたが良いアイデアを持っているなら...待っています) – edd

関連する問題