PHP使用正则表达式在子字符串之间剪切文本

时间:2013-12-01 10:29:04

标签: 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">
        <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>

两个子字符串:{EVENTS:}...{ENDEVENTS}块,第二个是其他所有字符串。换一种说法: $ group_header =

<div class="list-group">
    <a class="list-group-item active">
        <h4 class="list-group-item-heading">{EVENT_GROUP_TIME}</h4>
    </a>
</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>

我试图用substr来制作它,但是对于大日期来说似乎太慢了。有人可以建议如何在php中使用regexp进行此类操作吗?

1 个答案:

答案 0 :(得分:1)

你需要的正则表达式是这样的:

/(.*)({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);
?>

“s”修饰符的参考:

http://php.net/manual/en/reference.pcre.pattern.modifiers.php