我有一些字符串,并包含序列化数据。
示例
{waku:community id=1} just published an event {waku:event id=9 type=story}
实施
preg_match_all('/\{(waku:[^}]+)\}/', $str, $matches);
foreach ($matches[1] as $i => $elem) {
$prop = explode('&', preg_replace('/\s+/', '&', $elem));
$type = substr(array_shift($prop), strlen('waku:'));
var_dump($prop);
}
此代码不起作用,
输出
array(1) {
[0]=>
string(4) "id=1"
}
array(2) {
[0]=>
string(4) "id=9"
[1]=>
string(10) "type=story"
}
如何爆炸该字符串以获取 waku:type(社区/活动)的类型以及 id ?
我希望你能解决这个问题。
由于
答案 0 :(得分:2)
如果每个waku元素都有类型和 id ,您可以在正则表达式中识别它们:
preg_match_all('/\{waku:(\w+)\s+id=(\d+)\s*([^}]*)\}/', $str, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$type = $match[1];
$id = $match[2];
$otherParameters = $match[3];
}
答案 1 :(得分:0)
您可以使用:
$str = '{waku:community id=1} just published an event {waku:event id=9 type=story}';
$arr = array();
preg_replace_callback('~\{\s*waku:(?:community|event)\s*(.+?)\}~s',
function ($m) use (&$arr) { if (preg_match_all('~[^=\s]+=[^\s=]+~', $m[1], $w))
$arr[] = $w[0]; }, $str);
print_r($arr);
<强>输出:强>
Array
(
[0] => Array
(
[0] => id=1
)
[1] => Array
(
[0] => id=9
[1] => type=story
)
)
答案 2 :(得分:0)
{waku:\S+\s(id=\d+)\s*(type=[^}]+)?}
试试这个。看看演示。
https://regex101.com/r/gQ3kS4/8
$re = "/{waku:\\S+\\s(id=\\d+)\\s*(type=[^}]+)?}/";
$str = "{waku:community id=1} just published an event {waku:event id=9 type=story}";
preg_match_all($re, $str, $matches);