preg_match_all返回不需要的html文本和所需的文本


preg_match_all returning undesired html text with desired text

我目前正在处理preg_match_all

我正试图编写一个程序,获取强力球号码并将其插入mysql数据库以进行进一步操作。尽管我希望将它们作为日期、白色数字、强力球插入一行,但在我解决标签问题后,我会集中精力。我使用了一些来自实际powerball网站的源代码作为$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

不希望的结果:<b>11/12/2013</font>插入mysql而不是

注意:有成千上万的日期。另请注意:我是php的新手,所以对批评要宽容一些

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

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

其具有完全不需要的多余转义字符。将其缩减为:

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

并且这个(即您当前的regex)似乎可以按照您的意愿工作,请查看https://regex101.com/r/sP6lH7/1