Главная » PHP » php regex для поиска вложенных многострочных комментариев cfml
php regex для поиска вложенных многострочных комментариев cfml
Используя php, я хотел бы иметь регулярное выражение, которое соответствует вложенным многострочным комментариям в стиле, поддерживаемом ColdFusion:
1. <!--- this is a single comment line --->
2. <!---
multiline
comment
--->
3. <!---
multiline <!--- nested --->
comment <!--- comment --->
--->
Все три из этих случаев являются единственными действительными комментариями cfml. Я нашел много регулярных выражений, которые работают для первых двух случаев, но не третий, который является настоящим медведем. Любая помощь приветствуется.
(?<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
0
Другие решения
Вам нужно использовать рекурсивный шаблон:
<!---(?>[^<-]+|-(?!-->)|<(?!!---)|(?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
--->
Используя php, я хотел бы иметь регулярное выражение, которое соответствует вложенным многострочным комментариям в стиле, поддерживаемом ColdFusion:
Все три из этих случаев являются единственными действительными комментариями cfml. Я нашел много регулярных выражений, которые работают для первых двух случаев, но не третий, который является настоящим медведем. Любая помощь приветствуется.
Решение
Вы можете использовать рекурсивное регулярное выражение PCRE с
gs
опции:DEMO
Сломать (
x
Режим):Другие решения
Вам нужно использовать рекурсивный шаблон:
подробности: