【问题标题】:PHP regular expressionPHP 正则表达式
【发布时间】:2011-08-23 00:31:55
【问题描述】:

以下代码的目的是什么?

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

什么样的 $string 匹配这个表达式?

为什么会有一个字符@

【问题讨论】:

  • 这将从字符串中删除脚本标签
  • 一个更好的选择是使用striptags
  • 您问了 8 个问题并接受了 0 个?为什么?
  • 确定正则表达式部分,这里有一个很好的教程 - php regular expressions

标签: php regex


【解决方案1】:

该正则表达式将匹配字符串中的任何&lt;script&gt;...&lt;/style&gt;&lt;style&gt;...&lt;/style&gt; (X)HTML 块并将它们删除。这样做很可能是为了防止用户将这些(可能有害的)标签插入到您可能会回显给用户的数据中。如果不删除,它们可能会允许恶意用户更改您的网站外观,或将 javascript 插入您的网站,从而重写您的页面内容;他们甚至可能会强迫您的用户自动访问其他网站以及许多其他令人讨厌的事情。

至于@.... 在定义正则表达式时,它们传统上用斜杠括起来,例如:

/regexphere/si

正则表达式周围的/ 表示它的边界,第二个斜杠后面的字符是正则表达式引擎的标志,可以以某种方式运行。特别是i 表示“不区分大小写”,s 表示表达式中的. 应与换行符和制表符等空格匹配。这种格式是 PHP 从 Perl 和早于它的其他 unix 实用程序继承而来的。

其他字符(如@|%)可用于替换正则表达式周围的/,但当您的模式中有很多/s 时避免不必要的转义.例如,写@http://@ 比写/http:\/\// 更容易、更易读。在您的模式中,不转义结束标记中的 / 会稍微容易一些。

【讨论】:

    【解决方案2】:

    @ 用作/ 之类的分隔符,完全可以接受。

    该模式与我假设的 scriptstyle 标签匹配。

    【讨论】:

    • HTML 标签,我猜?
    【解决方案3】:

    这匹配 scriptstyle 标记。 @ 是模式的开始和结束,它没有任何意义。

    【讨论】:

      【解决方案4】:

      Is there anything like RegexBuddy in the open source world?(现已删除)列出了一些分析正则表达式的工具。也有在线工具,Is there an online RegexBuddy-like regular expression analyzer? 用于相同目的。

      @ 是您的示例正则表达式中的 PCRE 分隔符。

      见:Delimiters

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多