首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式准备用于HTML标记管理的字符串

使用正则表达式准备用于HTML标记管理的字符串
EN

Stack Overflow用户
提问于 2010-10-30 00:08:03
回答 3查看 142关注 0票数 0

P/S:我是PHP程序员。给定:

代码语言:javascript
复制
div{3|5|6|9}[id = abc| class=image], a[id=link|class=out]

我想使用正则表达式生成一个数组形式的结果,例如:

数组(

代码语言:javascript
复制
  [div] => array(
                "3|5|6|9",
                "id = abc| class=image"
                )

  [a] => array(
                "",
                "id=link|class=out")

)

有谁能帮帮忙吗?非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-30 02:48:29

试试这个:

代码语言:javascript
复制
$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);

输出:

代码语言:javascript
复制
Array
(
    [div] => Array
        (
            [0] => 3|5|6|9
            [1] => id = abc| class=image
        )

    [a] => Array
        (
            [0] =>
            [1] => id=link|class=out
        )

)
票数 1
EN

Stack Overflow用户

发布于 2010-10-30 00:16:10

如果您可以保证{}之间以及[]之间不存在逗号,则可以首先按,拆分字符串,然后使用以下正则表达式:

代码语言:javascript
复制
/([a-z]+)(\{(.*?)\})?\[(.*?)\]/

您想要捕获的组是$1$3$4 (如果使用preg_match_all,这些反向引用编号应该匹配)

注意:我在Javascript中测试过这个。

票数 0
EN

Stack Overflow用户

发布于 2010-10-30 22:28:21

代码语言:javascript
复制
preg_match_all('/(\w+)(\{(.*?)\})?\[(.*?)\](?:, |$)?/', $str, $m);

我相信上面的代码可以很好地工作,除非另一个字符串像这样:

代码语言:javascript
复制
$str='div{3|5|6|9}[id = abc| class=image], a[id=link|class=out], br, ul';

正则表达式不会捕获br和ul。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4053714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档