我有一个字符串
$sting=
' [
type="user"
name="ali"
key="#$WRE"
//problem
address="{
"type":"hellow"
}"
]';
我用key = value format
提取数据for (;;) {
if(!preg_match('~([A-Za-z0-9]+)\=\"([^\"]*)\"~m', $string,$match)){
break;
}
$string=str_replace($match[0], '', $string);
$dataArray[$match[1]]=$match[2];
}
echo "<br><pre>";
print_r($dataArray);
echo "<br></pre>";
但输出
<br><pre>Array
(
[type] = user
[name] = ali
[key] = #$WRE
[address] = {
)
<br></pre>
请帮帮我
答案 0 :(得分:0)
你可以使用像
这样的正则表达式'/(\w+)\s*=\s*"(.*?)"\s*(?=$|\w+\s*=)/ms'
请参阅regex demo
模式详情:
/s
是一个DOTALL修饰符,可使.
匹配包含换行符的任何符号/m
修饰符使$
与行尾相匹配(\w+)
- 第1组捕获1个或多个字母数字或下划线字符\s*
- 零个或多个空格=
- 等号\s*
- 0+ whitespaces "(.*?)"
- 双引号,零或多个除换行之外的任何字符,尽可能少到第一个双引号和此引号(第2组是在双引号之间捕获的)< / LI>
\s*
- 零个或多个空格(?=$|\w+\s*=)
- 一个积极的预测,要求字符串的结尾出现在当前位置之后,或者一个或多个字母数字后跟零个或多个空格和等号。