我有一个这样的模式:
#alphanumericX(anythingY){
anythingZ
}#
它可以像这样嵌套:
#alphanumeric1(anything1){
#alphanumericX(anythingY){
anythingZ
}#
}#
或者这样:
#alphanumeric1(anything1){
anything2
#alphanumericX(anythingY){
anythingZ
}#
}#
模式不仅可以写一次,而且可以这样写:
#alphanumericX(anythingY){
anythingZ
}#
#alphanumeric1(anything1){
anything1
}#
我想要一个正则表达式匹配上面的模式,所以它将返回如下:
#alphanumericX(anythingY){
anythingZ
}#
如何实现?
这是我当前的正则表达式:/#(.*?)\((.*?)\)\{(.*?)\}#/sm
答案 0 :(得分:3)
要知道何时匹配递归输入,最重要的标记是(?R)
(递归整个模式)或(?1)
,其中?
之后的数字表示要递归的子模式
在这里,您可以使用
#\w+\(\w+\){(?:(?R)|.)*?}#
https://regex101.com/r/iMUAZM/1
#\w+\(\w+\)
-匹配#
,单词字符,(
,单词字符和)
{
-比赛开始括号(?:(?R)|.)*?
重复匹配
(?R)
还是整个模式,或者.
-任何字符,直到}#
-模式的结尾