Php 基于短码的分离字符串
我需要一个preg函数,它为下面的字符串执行以下工作-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函数,
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
)