【发布时间】:2011-01-11 10:18:24
【问题描述】:
我几乎没有 regx 的经验,但尽我所能。
我有一个这样的字符串:
$fString = "Name=Sök,Value=2,Title=Combine me,Options=[Item1=1,Item2=2,Item3=3]";
我想得到一个如下所示的数组:
Array[0] = "Name=Sök"
Array[1] = "Value=2"
Array[2] = "Title=Combine me"
Array[3] = "Options=[Item1=1,Item2=2,Item3=3]"
到目前为止,我所做的是:
preg_match_all("/[^,]*[\w\d]*=[^,]*/",$fString,$Data);
但我不知道如何修复最后一个“选项”。
Array ( [0] => Array ( [0] => Name=S�k [1] => Value=2 [2] => Title=Combine me [3] => Options=[Item1=1 [4] => Item2=2 [5] => Item3=3] ) )
...为什么结果是数组中的数组?!?
[编辑]
我想我需要解释一下我在这里尝试做什么的整个想法,我不确定我是否已经走上了正确的道路。
我创建了一些类,我将所有“持久”变量存储在一个数组中。我有一个函数可以序列化这个数组,这样我就可以存储在数据库中。
我对 serialize() 函数了如指掌,但我正在做一些过滤,所以我不能按原样使用它,而且我也更喜欢让它更具可读性以进行手动编辑。这个数组可以有嵌套数组,需要保留。当我从数据库中全部读取回来时,必须重新创建原始数组。
我使用 eval() 命令完成了所有操作,但在嵌套数组时遇到了麻烦,因为 " 或 ' 字符破坏了主要的外部字符串。所以这种方法是尝试在没有嵌套字符串的情况下序列化所有内容需要保存。
所以如果我可以用 preg_match_all 解决嵌套数据,我就在那里,否则我需要想出另一个解决方案。
我猜数据也需要转义,比如 , 和 [ ]
【问题讨论】:
-
结果总是在一个数组中。 $Data 始终输出具有多种结果类型的多维数组。
-
值中可以有逗号吗,比如
"Title=Combine,me"?如果是,该案如何处理? -
你需要一个迷你解析器。看看@SirDarius 做了什么。您只需要注意最近的
,或[,然后前往[或返回]收集的列表。 -
阅读您的编辑后,我可以说这个用例需要通过 json_encode 函数进行 JSON 序列化。 JSON 是人工可编辑的,并且允许数组嵌套。另外,使用 json_decode 解码为 php 变量非常容易。
标签: php regex arrays preg-match-all