gpt4 book ai didi

php - 用于查找和替换 HTML 注释标签内容的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:36 25 4
gpt4 key购买 nike

我有一个 CMS,它使用基于 HTML 注释的语法让用户插入 Flash 视频播放器、幻灯片和其他用户无法轻松编写的“硬”代码。

一部 FLV 电影的语法如下所示: <!--PLAYER=filename.flv-->

我使用这段代码:

$find_players = preg_match("/<!--PLAYER\=(.*)-->/si", $html_content, $match);

如果只有一个玩家,这很好用,$match[1] 包含文件名(这就是我所需要的)

我对正则表达式的了解正在消失,所以我无法调整它来获取多个匹配项。

如果页面上有更多,它会完全崩溃,因为它太贪婪地匹配(从第一个 <!--PLAYER 到最后一个 -->

最佳答案

您可能需要正则表达式修饰符 U(PCRE_UNGREEDY,不贪婪地匹配)。这将获取尽可能短的匹配项,这意味着您不会从第一个 <!--PLAYER= 的开头到最后一个 -->

的结尾进行匹配

一个简化的例子:

<?php
$text = "blah\n<!-x=abc->blah<!-x=def->blah\n\nblah<!-x=ghi->\nblahblah" ;
$reg = "/<!-x=(.*)->/U" ;
preg_match_all( $reg, $text, $matches ) ;
print_r( $matches ) ;

您的代码将变为:

$find_players = preg_match_all("/<!--PLAYER=(.*)-->/Ui", $html_content, $matches);
// print $matches[1] ;

您使用的“s”修饰符 (PCRE_DOTALL) 可能也没有帮助;你不太可能有一个包含换行符的文件名。

编辑:@Stevens 建议使用这种语法,我同意这种语法更清晰一些——将 U 修饰符移动到捕获括号。

$find_players = preg_match_all("/<!--PLAYER=(?U)(.*)-->/i", $html_content, $matches);

关于php - 用于查找和替换 HTML 注释标签内容的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com