1

私はたくさんのものを試しましたが、何もうまくいきません。文字列があり、文字列をコンマで分割したいのですが、コンマが角括弧、中括弧、または二重引用符または単一引用符,の間にある場合は分割しません。この特定のケースでは、完全な iframe を維持します (これはすべてを破壊する)文字列。以下は文字列です...

class : putmeincoach, 
 id : random_id,  
   responsive : {   [ type= text ;  html = "< iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps/myplaces?ctz=480&ie=UTF8&ll=34.009394,-118.488514&spn=0.020687,0.020921&t=m&z=16"> < /iframe >" ;  ]  }

ただ欲しい

Array (
   [0] = 'class : putmeincoach',
   [1] = 'id : random_id',
   [2] = 'responsive : {   [ type= text ;  html = "< iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps/myplaces?ctz=480&ie=UTF8&ll=34.009394,-118.488514&spn=0.020687,0.020921&t=m&z=16"> < /iframe >" ;  ]  } '

一般化された正規表現パターンで preg_split または preg_match を使用してこれを行うことはできますか? Lemme はまた、二重引用符の間にコンマを入れないことが最も重要であることにも言及しています。

4

2 に答える 2

1

PHP の場合:

<?php
$input = '
    class : putmeincoach, 
    id : random_id, 
    responsive : {   [ type= text ;  html = "&lt; iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps/myplaces?ctz=480&amp;ie=UTF8&amp;ll=34.009394,-118.488514&amp;spn=0.020687,0.020921&amp;t=m&amp;z=16"&gt; &lt; /iframe &gt;" ;  ]  }, 
    testsinglequotes: \'hello world\', 
    testdoublequotes: "hello hello"';
$pattern = '/ 
    \b(\w+)\s*:   # capture the word before the colon 
    \s*(          # start capture group match after the colon
        {[^}]*}\s*|     # match everything between braces  OR
        "[^"]*"\s*|      # match everything between double quotes OR
        \'[^\']*\'\s*|   # match everything between single OR
        [^,]*           # match everything up to the comma 
        )         # end capture group
    (?:,|$)       # match comma or end of string (non-capture group) 
    /x';
preg_match_all($pattern ,$input, $matches);
print_r($matches);
?>

出力 PHP 5.3.13:

Array
(
    [0] => Array
        (
            [0] => class : putmeincoach,
            [1] => id : random_id,
            [2] => responsive : {   [ type= text ;  html = "&lt; iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps/myplaces?ctz=480&amp;ie=UTF8&amp;ll=34.009394,-118.488514&amp;spn=0.020687,0.020921&amp;t=m&amp;z=16"&gt; &lt; /iframe &gt;" ;  ]  },
            [3] => testsinglequotes: 'hello world',
            [4] => testdoublequotes: "hello hello"
        )

    [1] => Array
        (
            [0] => class
            [1] => id
            [2] => responsive
            [3] => testsinglequotes
            [4] => testdoublequotes
        )

    [2] => Array
        (
            [0] => putmeincoach
            [1] => random_id
            [2] => {   [ type= text ;  html = "&lt; iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps/myplaces?ctz=480&amp;ie=UTF8&amp;ll=34.009394,-118.488514&amp;spn=0.020687,0.020921&amp;t=m&amp;z=16"&gt; &lt; /iframe &gt;" ;  ]  }
            [3] => 'hello world'
            [4] => "hello hello"
        )

)

正規表現はあなたの友達です

于 2013-03-08T19:15:20.550 に答える
0

私は試した

^(class.*?,).*?(id.*?,).*?(responsive.*,?)$

http://www.gskinner.com/RegExr/を使用すると、これが機能しました。注意が必要なのは、最初の 2 つのグループの .* と最後のグループの ',' に遅延マッチングを使用することです。

正規表現の処理が少し異なるため、これを PHP に適応させる必要があると思います。

于 2013-03-08T19:20:06.167 に答える