Php 基于短码的分离字符串

Php 基于短码的分离字符串,php,preg-match,preg-split,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' ) 显然,我需要somepref函数,

我需要一个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'
)
显然,我需要somepref函数,但我尝试过根据空格格式分离字符串,但是当我在var1/var2/var3的任何参数中包含空格时,例如-

当我给出这个输入时-

string = {my_special_shortcode_name var1='some var1' var2='some_var2' var3='some_var3'}
注意一些VAR1中的空格(而不是一些_VAR1)

获得以下输出-

Array( 'var1' =>  'some',
       'var1' => 'var2',
       'some_var2' => 'var3'
)
因此,我需要一个函数,它根据
”外部的空格,而不是
内部的空格来分隔字符串

知道怎么做吗


编辑:我已成功将字符串提取到数组中。问题存在于包含“?”的URL中,该URL在“”中生成单独的字符串。所以现在,我需要有人建议如何转义“?”并将字符串分隔成数组?

您可以将它从
/[^\\]'/
中拆分出来。因此,这将得到
\
,而不是
\\
(其中,\ u是您的空格),这样您就可以在撇号的值中有一个转义字符。

您可以像/var[\d]+='([\w]+)一样使用正则表达式吗/

$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',
  ),
)
我会使用如下函数:

$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
        )

)
输出

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

发出以下警告-
编译失败:缺少偏移量5处字符类的终止]。听起来逃逸斜杠没用。它认为它看到的是
[^\]
,而不是
[^\\]
。你是不是在通过任何可能使逃生斜线倒塌的东西?我看不到你的代码,所以我不能说为什么,确切地说,它会收到错误消息。哦!我看到您正在成功提取字符串。我是否可以建议,对于新问题,您可以问一个新问题,而不是编辑旧问题?
$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
)