我有问题。我需要得到这样的页面的一些行:
Text text text ...
Porto-Portugal-May-2013
Barcelona-Spain-April-2013
Text text text text text ...
Madrid-Spain-April-2013
Text text text ...
我需要过滤器,以便只显示以下内容:
Porto-Portugal-May-2013
Barcelona-Spain-April-2013
Madrid-Spain-April-2013
(带有3个破折号的行)
可以使用preg_match_all或其他功能吗?
我使用cURL来获取页面内容。
我试过了:
$body = " Text text text ...
Porto-Portugal-May-2013
Barcelona-Spain-April-2013
Text text text text text ...
Madrid-Spain-April-2013
Text text text ...";
preg_match_all("/^(.*?)-(.*?)-(.*?)-(.*?)\/",$body, $match);
for($i=0;$i<sizeof($match[1]);$i++)
{
echo $match[1][$j].'<br/>';
}
谢谢。
答案 0 :(得分:2)
^
表示“字符串的开头”。
添加m
修饰符,使其成为“行首”。
然后更容易:
preg_match_all("/^(?:[^-\n]+-){3}[^-\n]+$/m",$body,$matches);
var_dump($matches[0]);
这应该输出一个包含匹配的每一行的数组。
答案 1 :(得分:1)
如果在最后一行中定义年份,则您不需要正则表达式来完成此任务,如下所示:
<?php
$yearsList = array(2013, 2014);
$body = " Text text text ...
Porto-Portugal-May-2013
Barcelona-Spain-April-2013
Text text text text text ...
Madrid-Spain-April-2013
Text text text ...";
$arr = explode("\n",$body);
$res = array();
foreach ($arr as $items){
$itemArr = explode('-', $items);
foreach ($itemArr as $item){
if (in_array($item, $yearsList)) $res[] = $items;
}
}
echo "<pre>";
print_r($res);
?>