以下代码的目的是什么?
preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string );
什么样的 $ string 匹配此表达式?
为什么有一个字符 @ ?
答案 0 :(得分:3)
这匹配脚本或样式标记。 @是模式的开始和结束,并不意味着什么。
答案 1 :(得分:2)
@
用作/
之类的分隔符,完全可以接受。
模式匹配我假设的脚本和样式标签
答案 2 :(得分:2)
该正则表达式将匹配字符串中的任何<script>...</style>
或<style>...</style>
(X)HTML块并将其删除。这很可能是为了防止用户将这些(可能有害的)标记插入到您可能回复给用户的数据中。如果不删除,他们可能允许恶意用户更改您的网站外观,或将javascript插入您的网站重写您的网页内容;他们甚至可能会强迫用户自动访问其他网站以及许多其他令人讨厌的事情。
至于@
....在定义正则表达式时,传统上它们用斜杠括起来,例如:
/regexphere/si
正则表达式周围的/
表示其边界和字符尾随第二个斜杠,正则表达式引擎的标志以某种方式运行。特别是i
表示“不区分大小写”,s
表示表达式中的.
应与新行和制表符匹配。这种格式由PHP从Perl和其他早于它的unix实用程序继承。
其他字符(例如@
或|
或%
)可用于替换正则表达式周围的/
,以避免在有很多情况时不必要的转义在您的模式中/
s。例如,编写@http://@
比/http:\/\//
更容易,更易读。在你的模式中,它可以更容易地逃避结束标记中的/
。
答案 3 :(得分:0)