0

次の文字列に対して次のジョブを実行する preg 関数が必要です-

string = {my_special_shortcode_name var1='some_var1' var2='some_var2' var3='some_var3'}

抽出された文字列は次のようになります-

Array( 'var1' =>  'some_var1',
       'var2' => 'some_var2',
       'var3' => 'some_var3'
)

明らかに、いくつかの pref 関数が必要ですが、スペースの書式設定に基づいて文字列を分離しようとしましたが、var1/var2/var3 の任意のパラメーターにスペースを含めると、ex-

代わりにこの入力をしたとき-

string = {my_special_shortcode_name var1='some var1' var2='some_var2' var3='some_var3'}

一部の VAR1 のスペースに注意してください (SOME_VAR1 の代わりに)

次の出力が得られます。

Array( 'var1' =>  'some',
       'var1' => 'var2',
       'some_var2' => 'var3'
)

したがって、 内のスペースではなく、 の外側のスペースに基づいて文字列を区切る関数が必要です。""""

方法はありますか?

編集:文字列を配列に正常に抽出しました。問題は「?」を含む URL にあります。これにより、「」内に別の文字列が作成されます。だから今、「?」をエスケープする方法を提案してくれる人が必要です。文字列を配列に分割しますか?

4

4 に答える 4

0

あなたはいつでもそれをから分割することができます/[^\\]' /。したがって、これは取得しますが、取得'_しません\'_(_はスペースです)。これにより、アポストロフィの値の中にエスケープ文字を含めることができます。

于 2013-03-15T18:01:15.040 に答える
0

/var[\d]+='([\w ]+)'/ のように正規表現できますか

$pattern = "/var[\d]+='([\w ]+)'/";
$subject = "{my_special_shortcode_name var1='some var1' var2='some_var2' var3='some_var3'}";
preg_match_all( $pattern, $subject, $matches);

$matches は以下で埋められます:

array (
  0 => 
  array (
    0 => 'var1=\'some var1\'',
    1 => 'var2=\'some_var2\'',
    2 => 'var3=\'some_var3\'',
  ),
  1 => 
  array (
    0 => 'some var1',
    1 => 'some_var2',
    2 => 'some_var3',
  ),
)
于 2013-03-15T18:48:46.143 に答える
0

次のようなpreg_match_all関数を使用します。

$str = "{my_special_shortcode_name var1='some var1' var2='some_var2' var3='some_var3'}";
preg_match_all("~(\w+)\s*=\s*'([^']+)'~", $str, $m);
print_r($m);

出力:

Array
(
    [0] => Array
        (
            [0] => var1='some var1'
            [1] => var2='some_var2'
            [2] => var3='some_var3'
        )

    [1] => Array
        (
            [0] => var1
            [1] => var2
            [2] => var3
        )

    [2] => Array
        (
            [0] => some var1
            [1] => some_var2
            [2] => some_var3
        )

)
于 2014-01-01T10:50:03.507 に答える