假定有效的正则表达式在PHP中不返回任何数据

假定有效的正则表达式在PHP中不返回任何数据,php,regex,Php,Regex,我正在使用以下代码: <?php $stock = $_GET[s]; //returns stock ticker symbol eg GOOG or YHOO $first = $stock[0]; $url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html"; $data = file_get_contents($url); $r_header = '/Prev. Week(.+?)Next W

我正在使用以下代码:

<?php
$stock = $_GET[s]; //returns stock ticker symbol eg GOOG or YHOO
$first = $stock[0];

$url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html";
$data = file_get_contents($url);

$r_header = '/Prev. Week(.+?)Next Week/';
$r_date = '/\<b\>(.+?)\<\/b\>/';

preg_match($r_header,$data,$header);
preg_match($r_date, $header[1], $date);

echo $date[1];
?>

我要发疯了,想弄明白为什么这不管用。任何帮助都会很棒。谢谢。

我认为这是因为您将值应用于正则表达式,就像它是纯文本一样。然而,它是HTML。例如,您的正则表达式应该修改为解析:


不解析常规纯文本,如:Prev。Week…

我认为这是因为您将值应用于正则表达式,就像它是纯文本一样。然而,它是HTML。例如,您的正则表达式应该修改为解析:


不解析常规纯文本,如:Prev。周….

您的正则表达式不允许HTML中的换行尝试:

$r_header = '/Prev\. Week((?s:.*))Next Week/';

s告诉它匹配中的换行符。匹配任意项。

您的正则表达式不允许在HTML中使用换行符。请尝试:

$r_header = '/Prev\. Week((?s:.*))Next Week/';
s告诉它匹配中的换行符。匹配任何一个

默认情况下,点与换行符不匹配。使用/your regex/s $r_标题可能应该是/Prev\。周+?下周/秒 仅供参考:你不需要在正则表达式中逃跑。 默认情况下,点与换行符不匹配。使用/your regex/s $r_标题可能应该是/Prev\。周+?下周/秒 仅供参考:你不需要在正则表达式中逃跑。
问题是HTML中有新行,您需要将其与s regex修饰符合并,如下所示

<?php
$stock = "goog";//$_GET[s]; //returns stock ticker symbol eg GOOG or YHOO
$first = $stock[0];

$url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html";
$data = file_get_contents($url);

$r_header = '/Prev. Week(.+?)Next Week/s';
$r_date = '/\<b\>(.+?)\<\/b\>/s';


preg_match($r_header,$data,$header);
preg_match($r_date, $header[1], $date);

var_dump($header);
?>

问题是HTML中有新行,您需要将其与s regex修饰符合并,如下所示

<?php
$stock = "goog";//$_GET[s]; //returns stock ticker symbol eg GOOG or YHOO
$first = $stock[0];

$url = "http://biz.yahoo.com/research/earncal/".$first."/".$stock.".html";
$data = file_get_contents($url);

$r_header = '/Prev. Week(.+?)Next Week/s';
$r_date = '/\<b\>(.+?)\<\/b\>/s';


preg_match($r_header,$data,$header);
preg_match($r_date, $header[1], $date);

var_dump($header);
?>
您要添加s PCRE_DOTALL修改器。默认情况下。与新行不匹配,我看到页面在您要查找的两个部分之间有它们

旁注:尽管它们除了可读性之外没有什么坏处,但您之前不需要反斜杠。

您想添加s PCRE_DOTALL修饰符。默认情况下。与新行不匹配,我看到页面在您要查找的两个部分之间有它们

旁注:虽然它们除了可读性之外没有什么坏处,但您之前不需要反斜杠