PHP使用regexp在子字符串之间剪切文本

PHP使用regexp在子字符串之间剪切文本,php,regex,substring,Php,Regex,Substring,我需要从这个html中提取: <div class="list-group"> <a class="list-group-item active"> <h4 class="list-group-item-heading">{EVENT_GROUP_TIME}</h4> </a> {EVENTS:} <a class="list-group-item"> <

我需要从这个html中提取:

<div class="list-group">
    <a class="list-group-item active">
        <h4 class="list-group-item-heading">{EVENT_GROUP_TIME}</h4>
    </a>
    {EVENTS:}
    <a class="list-group-item">
        <h4 class="list-group-item-heading">{EVENT_NAME}</h4>
        <p class="list-group-item-text"><i>{EVENT_LECTURER}</i></p>
        <p class="list-group-item-text">{EVENT_TIME}</p>
        <p class="list-group-item-text">{EVENT_LOCATION}</p>
    </a>
    {ENDEVENTS}
</div>
和$group_body=

<a class="list-group-item">
    <h4 class="list-group-item-heading">{EVENT_NAME}</h4>
    <p class="list-group-item-text"><i>{EVENT_LECTURER}</i></p>
    <p class="list-group-item-text">{EVENT_TIME}</p>
    <p class="list-group-item-text">{EVENT_LOCATION}</p>
</a>

{事件名称}

{EVENT\u讲师}

{EVENT\u TIME}

{EVENT\u LOCATION}


我试着用substr,但在大约会中似乎太慢了。有人能建议如何在php中使用regexp进行此类操作吗?

您需要的正则表达式如下:

/(.*)({EVENTS:}(.*){ENDEVENTS})(.*)/s
下面是测试它的完整PHP代码:

<?php
$regex = "/(.*)({EVENTS:}(.*){ENDEVENTS})(.*)/s";
$string = "
<div class=\"list-group\">
    <a class=\"list-group-item active\">
        <h4 class=\"list-group-item-heading\">{EVENT_GROUP_TIME}</h4>
    </a>
    {EVENTS:}
    <a class=\"list-group-item\">
        <h4 class=\"list-group-item-heading\">{EVENT_NAME}</h4>
        <p class=\"list-group-item-text\"><i>{EVENT_LECTURER}</i></p>
        <p class=\"list-group-item-text\">{EVENT_TIME}</p>
        <p class=\"list-group-item-text\">{EVENT_LOCATION}</p>
    </a>
    {ENDEVENTS}
</div>

";
preg_match($regex,$string,$matches);
print_r($matches);
?>

您需要的正则表达式如下:

/(.*)({EVENTS:}(.*){ENDEVENTS})(.*)/s
下面是测试它的完整PHP代码:

<?php
$regex = "/(.*)({EVENTS:}(.*){ENDEVENTS})(.*)/s";
$string = "
<div class=\"list-group\">
    <a class=\"list-group-item active\">
        <h4 class=\"list-group-item-heading\">{EVENT_GROUP_TIME}</h4>
    </a>
    {EVENTS:}
    <a class=\"list-group-item\">
        <h4 class=\"list-group-item-heading\">{EVENT_NAME}</h4>
        <p class=\"list-group-item-text\"><i>{EVENT_LECTURER}</i></p>
        <p class=\"list-group-item-text\">{EVENT_TIME}</p>
        <p class=\"list-group-item-text\">{EVENT_LOCATION}</p>
    </a>
    {ENDEVENTS}
</div>

";
preg_match($regex,$string,$matches);
print_r($matches);
?>


你试过用:代替正则表达式吗?不,我没有。原因是我只需要解析一个“模板”,而使用整个库并不是我想要的。但事情很酷。添加到bookmarks=)正如我所说,我尝试使用substr、strlen和strpos来实现它。还尝试了一些regexp匹配,如{EVENTS:}(.*?{ENDEVENTS}),但不起作用@Nimrod007@user3017651预期的输出与您的输入不匹配,请考虑您使用的XML的结尾,它具有基于XPath和XQuery的数据提取的所有功能。然后你用愚蠢的卷发背带毁了它?别忘了开枪打死那个有这个想法的笨蛋。你有没有试过用:代替正则表达式?没有,我没有。原因是我只需要解析一个“模板”,而使用整个库并不是我想要的。但事情很酷。添加到bookmarks=)正如我所说,我尝试使用substr、strlen和strpos来实现它。还尝试了一些regexp匹配,如{EVENTS:}(.*?{ENDEVENTS}),但不起作用@Nimrod007@user3017651预期的输出与您的输入不匹配,请考虑您使用的XML的结尾,它具有基于XPath和XQuery的数据提取的所有功能。然后你用愚蠢的卷发背带毁了它?别忘了射杀那个有这个想法的笨蛋。你会如何匹配其余的?我编辑了我的答案,以便其他部分也匹配。(匹配1)+(匹配3)是剩余的,带括号。使用
s
修饰符将换行符与
匹配。您将得到类似于
(.*){EVENTS:}.*.{ENDEVENTS}(.*)
我正在检查,它似乎不起作用,等等。。只有{EVENTS:}项匹配。如何打印结果?你能在粘贴箱里给我看看吗?你如何匹配其余的部分?我编辑了我的答案,以便其他部分也匹配。(匹配1)+(匹配3)是剩余的,带括号。使用
s
修饰符将换行符与
匹配。您将得到类似于
(.*){EVENTS:}.*.{ENDEVENTS}(.*)
我正在检查,它似乎不起作用,等等。。只有{EVENTS:}项匹配。如何打印结果?你能把我放在垃圾桶里看看吗?