正则表达式 - 在2个指定边界之间找到特定文本

Jea*_*ois 0 regex recursion

我正在尝试开发一个正则表达式,它将检测xsl样式表中的递归模板调用.

到目前为止,它还没有真正成功.

在下面的代码中,我需要检测模板B是否递归调用:

<xsl:template name="A"> 
     blah blha ?!@#?%$#^%?*?&(({}:"><;'[]\/.,./'
    <xsl:call-template name="B">  
    blah blah      
</xsl:template>    
<xsl:template name="B"> 
   blah blha 
    <xsl:call-template name="B">                
    blah blah  
</xsl:template>
<xsl:template name="C"> 
     blah blha 
    <xsl:call-template name="B">  
    blah blah  
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

在这种特定情况下,reg ex是可以的.

在我删除第二个B调用的情况下,正则表达式匹配最后一次调用B.这不应该发生.

(<xsl:template name=\"(?<templateName>\w+)\">.*?(?<=<xsl:call-template name=\"\k<templateName>\">).*?</xsl:template>)+
Run Code Online (Sandbox Code Playgroud)

我不是正则表达的大师.欢迎任何帮助.

谢谢.

Joe*_*oey 8

重申一个显而易见的观点:不要尝试使用正则表达式解析XML或其他非常规语言.请.

使用XML解析器并查看生成的树.您可以创建模板调用的图表并查找其中的周期.应该是一个更强大的解决方案,而不是试图与正则表达式一起破解它.通过这种方式,您还可以检测到模板A可能调用模板B,模板B调用模板C并再次调用模板A. 这种类型的递归对于您当前的方法是不可见的(如果可以说服它起作用).