使用 preg_match 提取内容 PHP

Using preg_match to extract contents with PHP

我正在使用 preg_match() 来提取这个 -

Mostly dry. Very mild (max 16°C on Fri afternoon, min 12°C on Tue night). Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night)

从这个 -

3 Day Weather Forecast Summary:</b><span class="read-more-small"><span class="read-more-content"> <span class="phrase">Mostly dry. Very mild (max 16&deg;C on Fri afternoon, min 12&deg;C on Tue night). Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night).</span>



我的代码不工作,只是 returns Array ( )

$contents = "3 Day Weather Forecast Summary:<\/b><span class=\"read-more-small\"><span class=\"read-more-content\"> <span class=\"phrase\">Mostly dry. Very mild (max 16&deg;C on Fri afternoon, min 12&deg;C on Tue night).
Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night).</span>";

preg_match('/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class=\"phrase\"> (.*?) </s', $contents, $matches);

print_r($matches);

例如你想在"Robert Went.I never realized when.
"中匹配"Robert went."。你应该按以下方式使用preg_match()

$text = "<span style='color: #999;'>Robert Went.I never realized when.<br />";

$matches = array();

preg_match("/.*(Robert Went\.).*/", $text, $matches);

我会说 DOMDocument 是你的朋友,但如果你真的想用 preg_match 解决这个问题,你可以试试这个:

$contents = "3 Day Weather Forecast Summary:<\/b><span class=\"read-more-small\"><span class=\"read-more-content\"> <span class=\"phrase\">Mostly dry. Very mild (max 16&deg;C on Fri afternoon, min 12&deg;C on Tue night).
Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night).</span>";

preg_match( '@<span class="phrase">(.*?)</span>@s', $contents, $matches);

var_export( $matches );

更新:

如果你不能去 类,试试这个:

preg_match( '@3 Day Weather Forecast Summary:.*?<span class="read-more-content"> <span class="phrase">(.*?)</span>@s', $contents, $matches);

输出将是:

Array
(
    [0] => <span class="phrase">Mostly dry. Very mild (max 16&deg;C on Fri afternoon, min 12&deg;C on Tue night).
Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night).</span>
    [1] => Mostly dry. Very mild (max 16&deg;C on Fri afternoon, min 12&deg;C on Tue night).
Winds decreasing (fresh winds from the N on Wed morning, calm by Wed night).
)

您似乎只是从字符串(以及第一部分“3 天天气预报摘要:”)中删除所有 html 代码(span 标记)。为什么不检测所有 <>?类似于:

$text = preg_replace('/<.*?>/', '', $text);
$text = trim(substr($text, strlen('3 Day Weather Forecast Summary:')));

第一行将 <>(含)内的所有文本替换为空字符串。 ? 是为了让它不贪心,所以只有 匹配 <> 被删除。

第二行只是删除了前导字符串。由于它可能有也可能没有前导空格,我还包含了 trim 函数,但这可能不是必需的。

显然,这两行也可以合并为一行。