我正在开发一个多平台应用程序,我必须在php中使用preg_match_all函数,但我无法以正确的方式使用它。
<div id="menu_background" style="background-image:url(images/menu_back_aylik.png);width:279px;height:164px;">
<div id="menu_header"><div class="one_menu_date" style="margin-left:94px;">**Çrş. 10.07.2013**</div>
<div onclick="next();" id="nextMenu"></div>
</div>
<div id="menu_container" style="margin-left:30px;margin-top:16px;">
<div id="menu_slider" style="width:17889px;">
<div class="one_menu">
<div class="one_lunchMainMenu">**lunch menu**</div>
<div class="one_lunchAltMenu">**lunch menu alternative**</div>
<div class="one_dinnerMainMenu">**dinner menu**</div>
<div class="one_dinnerAltMenu">**dinner menu alternative**</div>
</div>
</div>
</div>
10.07.2013是今天的日期
我想将午餐菜单分配给$ lunch,午餐菜单替代至$ lunch_a,但我对preg_match_all了解不多。
有人可以帮助我吗?
编辑:我正在尝试从其他网站获取午餐菜单
edit2:我遇到正则表达式
的问题答案 0 :(得分:1)
我有点困惑你在这里做什么。您似乎正在尝试将午餐菜单替换为名为$ lunch的PHP变量。
您是否只是在编写需要动态HTML生成的PHP页面?如果是这样,你不应该需要preg_match_all。你应该能够做到这一点:
<div class="one_lunchMainMenu"><?php echo $lunch; ?></div>
动态地将$ lunch的值注入代码中。
我可以想到您可能需要使用preg_match_all的唯一原因是,如果您将此HTML代码交给变量而不是自己编写,并且您尝试使用preg_match_all替换部分代码。
编辑:
看到你的评论后,看起来你确实需要替换HTML字符串中的数据,而不是动态地动态生成它。
由于您尝试进行替换,我会使用preg_replace
函数代替:
$escaped_val = preg_quote("**lunch menu**") # Need to escape this string because it contains usual regex special chars
preg_replace( /$escapedVal/, $lunch, $yourHTMLString )
答案 1 :(得分:0)
一种好方法是使用xpath提取数据:
$doc = new DOMDocument();
@$doc->loadHTMLFile($url);
$xpath = new DOMXPath($doc);
$lunches = $xpath->query("//div[@class='one_lunchMainMenu']/text()|//div[@class='one_lunchAltMenu']/text()");
foreach($lunches as $lunch) {
echo '<br>'. $lunch->nodeValue; }
答案 2 :(得分:0)
我已经解决了我的问题:
$str=file_get_contents('target url');
preg_match_all('#<div id="menu_background"(.*?)>(.*?)<div class="one_menu_date"(.*?)>(.*?)'.date("d").'(.*?)'.date("m").'(.*?)'.date("Y").'</div>(.*?)<div class="one_lunchMainMenu">(.*?)</div>(.*?)<div class="one_lunchAltMenu">(.*?)</div>(.*?)<div class="one_dinnerMainMenu">(.*?)</div>(.*?)<div class="one_dinnerAltMenu">(.*?)</div>(.*?)</div>(.*?)</div>(.*?)</div>(.*?)</div>#si',$str,$aaa);