再次使用PHP正则表达式

再次使用PHP正则表达式,php,regex,Php,Regex,以下两者之间有什么区别吗 preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string ); preg_replace('@]*?>.@si',''.$string); 及 preg_replace('@]*>.@si',''.$string); 是的 考虑这个字符串示例 <script>bla</script><script>hello</scrip

以下两者之间有什么区别吗

preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string );
preg_replace('@]*?>.@si',''.$string);

preg_replace('@]*>.@si',''.$string);
是的

考虑这个字符串示例

<script>bla</script><script>hello</script>

额外的
将反转表达式的贪婪性(它们在php中默认为贪婪):

  • /a+b/
    将匹配
    aaab
    中的
    aaab
  • /a*b/
    将匹配
    aaab
    中的
    aaab
  • /a*?b/
    将匹配
    aaab中的
    b
  • /a+?b/
    将与
    aaab
因此,在您的特定示例中,可以说,非贪婪表达式将捕获脚本标记及其内容。贪婪版本将开始匹配第一个脚本标记,并抓取所有内容(包括非脚本区域),直到最后一个接近的脚本标记

但是,不要依赖任何一个:


仔细看看,@alex:non-greedy版本(添加了
)首先列出;第二个是贪婪。“但是分析是正确的。”艾伦:哎呀,我今天一定是生活在相反的环境中。我将编辑:)
<script>bla</script><script>hello</script>
$dom = new DOMDocument;

$dom->loadHTML($string);

$scripts = $dom->getElementsByTagName('script');

$styles = $dom->getElementsByTagName('style');