我正在尝试使用preg_replace从远程页面获取一些数据,但在整理模式时我遇到了一些问题。
function getData($Url){
$str = file_get_contents($Url);
if(strlen($str)>0){
preg_match("/\<span class=\"SectionHeader\"\>title\</span>/<br/>/\<div class=\"header2\"\>(.*)\</div\></span\>/",$str,$title);
return $title[1];
}
}
这是HTML之前我最终投入了一百万条斜线(看起来我忘记了一两部分):
<span class="cell CellFullWidth"><span class="SectionHeader">mytitle</span><br/><div class="Center">Event Name</div></span>
事件名称是我想在函数中返回的数据。
非常感谢,这对屁股很痛苦。
答案 0 :(得分:0)
虽然我倾向于同意评论者的说法,这不是一个漂亮的解决方案,但这是我对你的陈述的未经测试的修订:
preg_match('#\<span class="SectionHeader"\>title\</span\>/\<br/\>/\<div class="header2"\>(.*)\</div\>\</span\>#',$str,$title);
我将双引号字符串更改为单引号,因为您没有使用双引号字符串的任何变量替换功能,这避免了必须使用反斜杠转义双引号以及避免任何歧义反斜杠(可能应该加倍以产生正确的字符串 - 请参阅the php manual on strings)。我将斜杠/分隔符更改为哈希#,因为匹配模式中出现的斜杠数量(其中一些在您的版本中没有反斜杠转义)。
答案 1 :(得分:0)
你的表达有很多不妥之处:
/
作为分隔符,但在各个地方使用/
未转义。<
和>
。它们不应该被逃脱。/
周围有一些流氓<br/>
。header2
,但在示例HTML中指定为Center
mytitle
和正则表达式中的title
所有这些都得到了纠正,你得到:
preg_match('(<span class="SectionHeader">mytitle</span><br/><div class="Center">(.*)</div\></span\>)',$data,$t);
如果您想匹配任何标题而不是特定标题mytitle
,只需将其替换为.*?
。