基于短代码分隔字符串

时间:2013-03-15 17:49:25

标签: php preg-match preg-split

我需要一个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'
)

所以我需要一个根据空间在<{1}}之外分隔字符串的函数,而不是""中的空格。

知道怎么做?

编辑:我已成功将字符串解压缩到数组中。问题在于包含'?'的网址这使单独的字符串在“”内。所以现在,我需要有人建议如何逃避'?'并将字符串分成数组?

4 个答案:

答案 0 :(得分:0)

您可以随时将其从/[^\\]' /拆分。因此,这将获得'_,但不会\'_(其中_是您的空间),以便您可以在撇号的值中包含转义字符。

答案 1 :(得分:0)

Youc你可以像/ 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);

$匹配将填充:

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',
  ),
)

答案 2 :(得分: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
        )

)

答案 3 :(得分:0)

$string = "{my_special_shortcode_name var1='http://stackoverflow.com/q/15438976/1020526?test' var2='some_var2' var3='some_var3'}";
preg_match_all("/\b(\w+)='([^']+)'/", $string, $matches);
$arr = array_combine($matches[1], $matches[2]); // first captured groups as key, and the second as the array values
print_r($arr);

<强>输出

Array
(
    [var1] => http://stackoverflow.com/q/15438976/1020526?test
    [var2] => some_var2
    [var3] => some_var3
)