使用正则表达式准备字符串以进行HTML标记管理

时间:2010-10-29 16:08:03

标签: regex

P / S:我是一名PHP程序员。 给出:

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")

有人请帮忙吗? 非常感谢你!

3 个答案:

答案 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。