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