【问题标题】:preg_match_all returning undesired html text with desired textpreg_match_all 返回带有所需文本的不需要的 html 文本
【发布时间】:2016-01-09 21:20:40
【问题描述】:

我目前正在为 preg_match_all 苦苦挣扎

我正在尝试编写一个程序来获取强力球号码并将它们插入 mysql 数据库以进行进一步操作。虽然我希望将它们作为日期、白色数字、强力球插入一行,但在修复标签问题后,我将专注于这一点。我正在使用来自实际强力球网站的一些源代码作为 $url 变量。

这是我的代码:

$url='localhost/lotto/test.html';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$resultDate = curl_exec($ch);
$resultNum = curl_exec($ch);
$resultPb = curl_exec($ch);
curl_exec($ch);
$link1 = new mysqli("localhost", "root", "", "lotto");
    if($link1 === false){
        die("ERROR: could not connect. " . mysqli_connect_error());
    }
    else {
        echo "Connection Established </br>";
    }
        preg_match_all("/<b>(.+?)<\/font>/", $resultDate, $dates);
            for ($d=0; $d<count($resultDate); $d++) {
                preg_match_all("/white_40.gif\" class=\"cssNumber-24\">(.+?)<\/td>/", $resultNum, $numbers);
            for($n=0; $n<count($resultNum); $n++) {
                preg_match_all("/red_40\.gif\" class=\"cssNumber-24\">(.+?)<\/td>/", $resultPb, $pb);
            for($p=0; $p<count($resultPb); $p++) {      
                foreach(array($dates[$d]) as $date) {
                    for ($q=0;$q<count($date);$q++){
                        foreach(array($numbers[$n]) as $number) {
                            for ($i=0; $i<count($number); $i++) {
                                foreach (array($pb[$p]) as $power) {
                                    for ($w=0;$w<count($power);$w++){
                $sql = "INSERT INTO Winners (dates,white,power) VALUES ('$date[$q]','$number[$i]','$power[$w]')";
        if(mysqli_query($link1, $sql)){
            echo "Data added successfully. </br>";
        }
        else {
            echo "ERROR: Could not execute $sql. " . mysqli_error($link1);
        }
                    }
                }
                    }
                }
                    }
                }
mysqli_close($link1);
}
    }
        }   






curl_close($ch);

期望的结果: 11/12/2013插入mysql

不良结果: &lt;b&gt;11/12/2013&lt;/font&gt; 改为插入 mysql

注意:有数千个日期。 另请注意:我对 php 很陌生,所以请不要批评,哈哈。

【问题讨论】:

  • 与 HTML 不同,正则表达式适用于正则语言。
  • 通过 regex101.com 运行 preg_match_all 会返回正确的结果。怎么了?你的源数据块是什么?
  • 好吧,我正在使用 curl 获取一个 url,找到我正在寻找的数据,将该数据插入 mysql 数据库。我可以回显结果,它会显示所需的结果,但是将其插入 mysql 会显示在数据库中,并带有 &lt;b&gt; 和 `。有什么我想念的吗?
  • @ovranon 这个问题似乎已经停滞/被放弃了。你还在为这个问题寻求解决方案吗?我愿意帮助你,如果你能提供一个很小但相关的样本来说明$resultDate 可能持有的东西。我相信我也可以改进您的流程。现在由您决定是否删除这个旧问题或提供一些附加信息。让我们以一种或另一种方式解决此页面。

标签: php preg-match-all


【解决方案1】:

您的 preg_match_all 正则表达式当前是:

preg_match_all("/\&lt;b\&gt;(.*?)\&lt;\/font\&gt;/",$resultDate, $dates);

它有多余的转义字符,这些字符只是不需要的。将其简化为:

preg_match_all("/<b>(.*?)<\\/font>/",$resultDate, $dates);

这——即你当前的正则表达式——似乎可以按你的意愿工作,请在https://regex101.com/r/sP6lH7/1 上查看

【讨论】:

  • 所有多余的转义都是因为我找不到错误并感到沮丧,哈哈。感谢您的快速回复
  • @ovranon 解决了你的问题吗?您的正则表达式看起来和行为正确,因此我需要更多信息来诊断您得到不准确结果的原因
  • 我已经编辑了原帖中的代码。但即使经过几天的努力,我仍然无法弄清楚为什么它会出现在带有标签的 mysql 中。
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 2014-07-26
  • 2021-11-05
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多