这个正则表达式意味着什么

时间:2010-07-20 07:39:10

标签: php regex preg-replace

$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);

还有什么地方可以学习正则表达式吗?我知道基础知识。

5 个答案:

答案 0 :(得分:13)

!             # ... Beginning of the regex...
    /         # 1. Match a slash
    \*        # 2.  and an asterisk
    [^*]*     # 3.   followed by some non-asterisks
    \*+       # 4.    and then at least 1 asterisks
    (         #    And then some groups of
     [^/]     # 5.  match a non-slash
     [^*]*    # 6.   followed by some non-asterisks
     \*+      # 7.    and then at least 1 asterisks
    )*        #
    /         # 8. And finally a slash
!             # ... End of the regex ...
                                         .——————<—————————————<————————————.
                .———<——.       .——<——.   |          .——<———.       .——<——. |
                |      |       |     |   |          |      |       |     | |
[ / ]—>—[ * ]—>—o—[^*]—' .—>—[ * ]—>—o—>—o—>—[^/]—>—o—[^*]—' .—>—[ * ]—>—o—' .—>—[ / ]
                |        |               |          |        |               |
                '————>———'               |          '———>————'               |
                                         '——————>——————————————>—————————————'

  1       2        3*          4+        (    5         6*         7+      )*      8 

示例实例:

/* blah *** f /* foo*** */
12333333444566675666777578

这用于删除C风格的评论。

答案 1 :(得分:10)

这似乎用于匹配评论/* … */

  • /\* 与领先的/*
  • 相匹配
  • [^*]*\*+ 匹配除*后跟一个或多个*
  • 的所有后续字符
  • ([^/][^*]*\*+)* 匹配以/以外的任何字符开头的零个或多个字符序列(以避免因为最后一个字符为*而过早结束) ,后跟除*之外的任何字符,后跟一个或多个*
  • / 与结尾/
  • 相匹配

答案 2 :(得分:1)

它执行上述注释中所说的内容。它删除了评论(来自CSS文件)。

您可能在

找到了它

答案 3 :(得分:0)

这意味着有人喝醉了。

说真的,我甚至不想尝试完全解码,但看起来它的设计是用一些正斜线和星号的组合替换(例如删除它们)。

这就是正则表达式给正则表达式一个坏名字。

除了Chris对regular-expressions.info的建议之外,您应该查看PHP正则表达式的参考文档,这些正则表达式实际上是PCRE(Perl兼容正则表达式),这意味着您可能还应该阅读Perl正则表达式文档。 / p>

自从我拿起它的版本以来已经很久了,但我似乎记得O'Reilly的Mastering Regular Expressions是一本关于正则表达式的好书:

答案 4 :(得分:0)

一步一步:

!仅用作正则表达式开头/结尾的分隔符,因此它们不用于匹配。

/\*匹配正斜杠后跟一个星号(星号是一个特殊字符,因此用反斜杠转义)。

[^*]*匹配0个或更多不是星星的字符。

\*+匹配一颗或多颗星。


[^/]匹配除正斜杠之外的任何内容

[^*]*匹配0个或更多不是星星的字符。

\*+匹配1个或更多星。


括号中的最后一位,后跟一个星号,匹配该段0次或更多次。

/匹配另一个正斜杠。

总的来说,它匹配任何模式,如/*asdf***asdfasdf***/,即它匹配那种评论风格。