我需要一个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}}之外分隔字符串的函数,而不是""
中的空格。
知道怎么做?
编辑:我已成功将字符串解压缩到数组中。问题在于包含'?'的网址这使单独的字符串在“”内。所以现在,我需要有人建议如何逃避'?'并将字符串分成数组?
答案 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
)