基于短代码的单独字符串



我需要一个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的任何参数中包含空格时,例如

当我给出这个输入时-

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

因此,我需要一个函数,它基于""外部的空间来分离字符串,而不是""内部的空间。

知道怎么做吗?

EDIT:我已成功将字符串提取到数组中。问题在于包含"?"的URL这使得"中的单独字符串。所以现在,我需要有人建议如何逃离"?"并将字符串分隔成数组?

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

您可以像/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',
  ),
)

我会使用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
        )
)
$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
)

相关内容

  • 没有找到相关文章

最新更新