div{3|5|6|9}[id = abc| class=image], a[id=link|class=out]
我想使用正则表达式将结果生成为数组,例如:
阵列(
[div] => array(
"3|5|6|9",
"id = abc| class=image"
)
[a] => array(
"",
"id=link|class=out")
)
有人请帮忙吗? 非常感谢你!
答案 0 :(得分:1)
试试这个:
$str='div{3|5|6|9}[id = abc| class=image], a[id=link|class=out]';
preg_match_all('/(\w+)(\{(.*?)\})?\[(.*?)\](?:, |$)?/', $str, $m);
$out = array($m[1][0] => array($m[3][0], $m[4][0]), $m[1][1] => array($m[3][1], $m[4][1]));
print_r($out);
输出:
Array
(
[div] => Array
(
[0] => 3|5|6|9
[1] => id = abc| class=image
)
[a] => Array
(
[0] =>
[1] => id=link|class=out
)
)
答案 1 :(得分:0)
如果您可以保证{
与}
之间以及[
与]
之间不存在逗号,则可以先将字符串拆分为{{1}然后使用这个正则表达式:
,
您想要捕获的群组是/([a-z]+)(\{(.*?)\})?\[(.*?)\]/
,$1
和$3
(如果您使用$4
,这些反向引用号码应匹配)
注意:我在Javascript中对此进行了测试。
答案 2 :(得分:0)
preg_match_all('/(\w+)(\{(.*?)\})?\[(.*?)\](?:, |$)?/', $str, $m);
我相信上述情况很好,除非另一个字符串如下:
$str='div{3|5|6|9}[id = abc| class=image], a[id=link|class=out], br, ul';
正则表达式不捕获br和ul。