【问题标题】:i couldn't use preg_match_all我不能使用 preg_match_all
【发布时间】:2013-07-08 14:39:28
【问题描述】:

我正在开发一个多平台应用程序,我必须在 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 menu 分配给 $lunch,lunch menu alternative 分配给 $lunch_a,但我对 preg_match_all 了解不多。

有人可以帮我吗?

编辑:我正在尝试从另一个网站获取午餐菜单

edit2:我在使用 regex

时遇到问题

【问题讨论】:

  • 不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php

标签: php regex html-parsing preg-match preg-match-all


【解决方案1】:

我有点困惑你在这里做什么。您似乎正在尝试将 lunch menu 替换为名为 $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 )

【讨论】:

  • 我正在尝试通过 file_get_contents 从另一个网站获取这些数据
  • 听起来这里有几个问题。 1)您必须从另一个站点获取 $lunch (等)的字符串(请参阅下面的 Casimir 帖子)。 2) 你想输出一个 HTML 页面,其中插入了 $lunch (等)到某个地方(参见上面 dsw88 的帖子,它的第一部分)。这就是你想做的一切吗?顺便说一句,我会将 $lunch 等本地存储在数据库或文件中,每天仅从其他站点读取一次,因此您不必一直访问其他站点。
【解决方案2】:

一个好的方法是使用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; }

【讨论】:

    【解决方案3】:

    我的问题已经解决了:

    $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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多