Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RegExp混淆行为_Php_Regex - Fatal编程技术网

Php RegExp混淆行为

Php RegExp混淆行为,php,regex,Php,Regex,我正在尝试匹配PHP中的下一个表达式: preg_match( '#<head>([\s\S]*)</head>#' , $this -> $html_file_content , $match ); 它们在JavaScript中都工作得很好。我就是不明白,为什么PHP中没有匹配项 伙计们,你们能帮我处理一下吗?我不能复制这个,所以我猜$this->$html\u文件内容应该是 $this -> html_file_content 如果不起作用,可以使用S

我正在尝试匹配PHP中的下一个表达式:

preg_match( '#<head>([\s\S]*)</head>#' , $this -> $html_file_content , $match );
它们在JavaScript中都工作得很好。我就是不明白,为什么PHP中没有匹配项


伙计们,你们能帮我处理一下吗?

我不能复制这个,所以我猜
$this->$html\u文件内容应该是

$this -> html_file_content
如果不起作用,可以使用
SimpleXML
尝试,假设内容格式正确

$html = new SimpleXMLElement($html_file_content);
$head = "" . $html->head;


“您不应该使用正则表达式解析HTML”的常见答案是错误的。据我所知,你并不是在尝试使用HTML;您只需要从已知的分隔符中提取字符串值。如果分隔符是
[head]…[/head]

没有人会说任何话。你说必须有更多的空格元素,但你需要包含空格的任何文本。试试这个(.*)我没有试过,但我希望这是正确的


/(.*)/

请同时发布
$this->$html\u文件内容的值
一般回答:您不应该使用正则表达式来处理html。使用DOM:@MichaelSazonov haha,可能是
$this->$html\u文件内容
,因为它通常应该是
$this->$html\u文件内容
(从类变量中删除的最后一个
$
)。除此之外,您应该使用DOM。^^不要使用正则表达式来解析HTML。您无法使用正则表达式可靠地解析HTML,并且您将面临悲伤和挫折。一旦HTML与您的预期不同,您的代码将被破坏。有关如何使用PHP mod正确解析HTML的示例,请参阅已经编写、测试和调试过的ULE。事实上,您的猜测是正确的。在编写了一整天之后,我根本看不到这样的错误…符号
$
不应该在那里。
将不匹配没有
s
修饰符的换行符事实上,
[\s]*
匹配所有字符,包括空格
$html = new SimpleXMLElement($html_file_content);
$head = "" . $html->head;