~~~字符串解析问题~

-神仙- 2005-01-16 07:23:36
比如,把
$s="name='test' value1='testvar' value2=44";
解析到数组
array(
'name'=>'test',
'value1'=>'testvar',
'value2'=>44
);
...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Meteorlet 2005-01-16
  • 打赏
  • 举报
回复
没关系,只要这些东西在''之内,正则都可以匹配,而且有很多模式,我也记不大清楚,应该是可以不用匹配子串的,测试:
$s = "name1='name=value1' name2='value12值'";
$a = array();
preg_replace('/(.+?)=[\']{0,1}([^\']+)[\']{0,1}/e',
'\$a[\'$1\'] = \'$2\'', $s);
print_r($a);

输出:
Array ( [name1] => name=value1 [ name2] => value12值 )
-神仙- 2005-01-16
  • 打赏
  • 举报
回复
值是允许用等号,空格,还有中文等等的
Meteorlet 2005-01-16
  • 打赏
  • 举报
回复
难道正则只能匹配字母数字?用[^=]可以匹配任何不是=号的字符,用.也可以匹配任何字符除了换行符
-神仙- 2005-01-16
  • 打赏
  • 举报
回复
如果值里面有空格或者=呢?
我就是不好解决这样的问题才来问的
ice_berg16 2005-01-16
  • 打赏
  • 举报
回复
function string_to_array( $str )
{
$tmp = explode( " ", $str );
$arr = array();
foreach( $tmp as $v )
{
$tmp2 = explode( "=", $v );
$arr[$tmp2[0]] = $tmp2[1];
}
return $arr;
}

$s="name='test' value1='testvar' value2=44";

print_r( string_to_array( $s ) );
-神仙- 2005-01-16
  • 打赏
  • 举报
回复
我那个只是一个例子
其实里面的值什么都可以的
不一定是字母数字
  • 打赏
  • 举报
回复
用正则也许是个好办法
Meteorlet 2005-01-16
  • 打赏
  • 举报
回复
$s="name='test' value1='testvar' value2=44";
$a = array();
preg_replace('/([a-z0-9]+)=[\']{0,1}([a-z0-9]+)[\']{0,1}/ie',
'$a[\'\1\'] = \'\\2\'', $s);
print_r($a);
-神仙- 2005-01-16
  • 打赏
  • 举报
回复
已经基本解决,用的是xml_parse
但是效率很低,不知道谁有更好的办法
-神仙- 2005-01-16
  • 打赏
  • 举报
回复
你来试试看
leojay1 2005-01-16
  • 打赏
  • 举报
回复
自己写个函数撒

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧