php-regex匹配div标记

php-regex匹配div标记,php,regex,html-parsing,Php,Regex,Html Parsing,我使用正则表达式匹配页面中的特定div,并用自定义格式的div替换它们。我不能使用domdocument,因为我们处理的页面经常格式错误,在通过domdocument运行它之后,页面被重新格式化,并且不显示相同的内容 我目前正在使用以下功能,这些功能非常有效: preg_match('#(\<div id=[\'|"]'.$key.'[\'|"](.*?)\>)(.*?)\<\/div\>#s', $contents, $response); preg\U match(

我使用正则表达式匹配页面中的特定div,并用自定义格式的div替换它们。我不能使用domdocument,因为我们处理的页面经常格式错误,在通过domdocument运行它之后,页面被重新格式化,并且不显示相同的内容

我目前正在使用以下功能,这些功能非常有效:

preg_match('#(\<div id=[\'|"]'.$key.'[\'|"](.*?)\>)(.*?)\<\/div\>#s', $contents, $response);

preg\U match(“#”(\您可以使用Ungreedy modifier(
U
),并且-不要使用
*
,而是
[^>]*
(这意味着任何不是>as>的内容都是标记的结尾,并且您正在使用标记进行搜索)。如果这不是您的分隔符(您使用的是#as分隔符),则不需要转义/转义

preg#u match('.#(]*id=[\'.[\'.[124;”].$key.[\'.[^>]*>)(.*)#isU',$contents,$response);

您可以使用Ungreedy modifier(
U
),并且-不要使用
*
,而是
[^>]*
(这意味着任何不是>as>的内容都是标记的结尾,您正在使用标记进行搜索)。当这不是您的分隔符(您使用的是#as分隔符)时,您不需要转义/转义

preg#u match('.#(]*id=[\'.[\'.[124;”].$key.[\'.[^>]*>)(.*)#isU',$contents,$response);

不要使用正则表达式进行HTML解析,有些DOM解析器存在,比如PHP DOM:

不要使用正则表达式进行HTML解析,有些DOM解析器存在,比如PHP DOM:

+1
[^>]*
在正则表达式解析HTML.I+1
[^>]*
在正则表达式解析HTML时非常有价值。我看了一下,可能会对您有所帮助:。看一下,可能会对您有所帮助:。是的,但要使用它们,您需要一个有效的dom,这可能意味着首先要整洁,然后实现dom对象,这可能会带来很大的开销。有时,特别是当您正在查看时对于特定的信息,当你可以用两行代码编写一个简单的正则表达式时,通过Dom解析的整个过程是没有意义的。不必担心这些东西。它只是一个链锯。对,但是要使用它们,你需要一个有效的Dom,这意味着首先要整洁,然后实现Dom对象,然后有时,特别是当你在寻找特定的信息时,当你可以用两行代码编写一个简单的正则表达式时,完成整个Dom解析过程是没有意义的。没有必要害怕这些东西。它只是一个链锯。
<div id="test"></div>
<div id="test" style="width: 300px; height: 200px;"></div>
etc...
<div class="test" id="test"></div>
preg_match('#(\<div(.*?)id=[\'|"]'.$key.'[\'|"](.*?)\>)(.*?)\<\/div\>#s', $contents, $response);
preg_match('#(<div[^>]*id=[\'|"]'.$key.'[\'|"][^>]*>)(.*)</div>#isU', $contents, $response);