使用php,我希望有一个与ColdFusion支持的样式的嵌套AND多行注释相匹配的正则表达式:
1. <!--- this is a single comment line --->
2. <!---
multiline
comment
--->
3. <!---
multiline <!--- nested --->
comment <!--- comment --->
--->
所有这三种情况都是单一有效的cfml评论。我发现很多正则表达式适用于前两种情况,但不是第三种正常情况。任何帮助表示赞赏。
答案 0 :(得分:1)
您需要使用递归模式:
<!---(?>[^<-]+|-(?!-->)|<(?!!---)|(?R))*--->
细节:
<!---
(?> # open an atomic group
[^<-]+ # all that is not a < or a -
| # OR
-(?!-->) # a - not followed by -->
| # OR
<(?!!---) # a < not followed by !---
| # OR
(?R) # recursion (repeat the whole pattern itself)
)* # close the atomic group, repeat zero or more times
--->
答案 1 :(得分:0)
您可以使用带有gs
选项的递归PCRE正则表达式:
(?<comment><!---(?(?=<!---)\g<comment>|.)*?--->)
细分(x
模式):
(?<comment> # define group "comment"
<!--- # match a "<!---"
(?(?=<!---) # is the next sequence a "<!---"
\g<comment> # yes: match a comment (recurse)
|. # no: match a character
)*? # and repeat
---> # until a "--->"
) # close "comment" definition