我需要从这个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进行此类操作吗?
答案 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