我正在尝试开发一个正则表达式,它将检测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)
我不是正则表达的大师.欢迎任何帮助.
谢谢.
重申一个显而易见的观点:不要尝试使用正则表达式解析XML或其他非常规语言.请.
使用XML解析器并查看生成的树.您可以创建模板调用的图表并查找其中的周期.应该是一个更强大的解决方案,而不是试图与正则表达式一起破解它.通过这种方式,您还可以检测到模板A可能调用模板B,模板B调用模板C并再次调用模板A. 这种类型的递归对于您当前的方法是不可见的(如果可以说服它起作用).