我对正则表达式很可怕,你能帮忙吗?

E3p*_*3pO 1 php regex arrays foreach

我一直在尝试在过去的4个小时内创建一个正则表达式以获取下面的信息并将其全部添加到我可以运行forloop的数组中.在大约2个小时内,如果这不起作用,304人将不会收到一条短信,显示我们的学校系统现已取消.

http://www.wane.com/generic/weather/closings/School_Delays_and_Closings

<tr class="B">
<td width="35%">Blackhawk Christian School</td>

<td width="25%">Allen</td>

<td width="80%">2 Hour Delay&nbsp;</td>
</tr>

<tr class="S">
<td width="35%">Southwest Allen County Schools</td>

<td width="25%">Allen</td>

<td width="80%">2 Hour Delay&nbsp;</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我需要的是foreach td width="35%"将它添加到数组中,其中包含学校系统的td wdith="80%"信息和信息.因为我不需要仅针对一个学校系统,我需要在列表中检查所有这些并将其显示给用户.

我正在做:

$wanetv = get_url_contents("http://www.wane.com/generic/weather/closings/School_Delays_and_Closings");
Run Code Online (Sandbox Code Playgroud)

抓住网页.


编辑:

试图将下面发布的一些C#转换为PHP ...无法弄明白.这是我的尝试:

   $a = "<tr class='B'> <td width='35%'>Blackhawk Christian School</td> <td width='25%'>Allen</td> <td width='80%'>2 Hour Delay&nbsp;</td> </tr> <tr class='S'> <td width='35%'>Southwest Allen County Schools</td><td width='25%'>Allen</td><td width='80%'>2 Hour Delay&nbsp;</td> </tr> ";
    $SchoolNameKeyword = "<td width='35%'>";
    $DelayKeyword = "<td width='80%'>";

    while (strlen(strstr($a, $SchoolNameKeyword))>0)
    {

        $a = substr($a,strrpos($a, $SchoolNameKeyword)+strlen($SchoolNameKeyword));
        $schoolName = substr($a, 0,strrpos( $a, "<"));
        $a = substr($a,strrpos($a, $DelayKeyword) + strlen($DelayKeyword));
        $delay = substr( $a, 0,strrpos( $a, "<"));

        $arr[$schoolName] = $delay;
    }
        print_r($arr);
Run Code Online (Sandbox Code Playgroud)

打印出来:

Array
(
    [Southwest Allen County SchoolsAllen2 Hour Delay  ] => 2 Hour Delay  
)
Run Code Online (Sandbox Code Playgroud)

And*_*ber 8

你真的,真的,真的,在这里使用HTML解析器而不是正则表达式会更好...尤其是当你不控制源代码时,它们很容易破坏你的正则表达式解析,而HTML解析会更有可能继续工作.

  • 这是没有正确例子的说话.PHP附带一个原生DOM解析器,并且有很多额外的库.你能证明一下吗? (4认同)

sal*_*the 7

你真的,真的,真的,在这里使用HTML解析器而不是正则表达式会更好...尤其是当你不控制源代码时,它们很容易破坏你的正则表达式解析,而HTML解析会更有可能继续工作.

- 安德鲁巴伯

这样一个例子,使用PHP的DOM可能看起来像下面的例子.但是,我会对安德鲁关于HTML解析"更有可能继续工作"的评论不以为然,因为源HTML中的更改可能会影响它,就像任何正则表达式一样.

$doc = new DOMDocument;

// Temporarily use "internal" XML error handling to keep HTML warnings quiet
libxml_use_internal_errors(true);
$doc->loadHTMLFile('http://www.wane.com/generic/weather/closings/School_Delays_and_Closings');
libxml_use_internal_errors(false);

// Find each <tr> for our schools
$xpath = new DOMXPath($doc);
$rows  = $xpath->query('///h2[.="Schools: ALL"]/following-sibling::table/tbody/tr[count(td) = 3]');

// Build array of name, county and delay information for each school
$schools = array();
foreach ($rows as $row) {
    $tds    = $row->getElementsByTagName('td');
    $school = $tds->item(0)->textContent;
    $info   = $tds->item(2)->textContent;
    $schools[$school] = $info;
}

echo "Found {$rows->length} schools:" . PHP_EOL;
print_r($schools);
Run Code Online (Sandbox Code Playgroud)

以上使用您可能不熟悉的类/技术.请问问题.