$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
还有什么地方可以学习正则表达式吗?我知道基础知识。
答案 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***/
,即它匹配那种评论风格。