使用 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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°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 天天气预报摘要:”)中删除所有 html 代码(span
标记)。为什么不检测所有 <
和 >
?类似于:
$text = preg_replace('/<.*?>/', '', $text);
$text = trim(substr($text, strlen('3 Day Weather Forecast Summary:')));
第一行将 <
和 >
(含)内的所有文本替换为空字符串。 ?
是为了让它不贪心,所以只有 匹配 <
和 >
被删除。
第二行只是删除了前导字符串。由于它可能有也可能没有前导空格,我还包含了 trim
函数,但这可能不是必需的。
显然,这两行也可以合并为一行。
我正在使用 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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°C on Fri afternoon, min 12°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°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 天天气预报摘要:”)中删除所有 html 代码(span
标记)。为什么不检测所有 <
和 >
?类似于:
$text = preg_replace('/<.*?>/', '', $text);
$text = trim(substr($text, strlen('3 Day Weather Forecast Summary:')));
第一行将 <
和 >
(含)内的所有文本替换为空字符串。 ?
是为了让它不贪心,所以只有 匹配 <
和 >
被删除。
第二行只是删除了前导字符串。由于它可能有也可能没有前导空格,我还包含了 trim
函数,但这可能不是必需的。
显然,这两行也可以合并为一行。