正则表达式 - 找到2指定边界之间的特定文本
我想开发一个正则表达式,它将检测xsl样式表中的递归模板调用。正则表达式 - 找到2指定边界之间的特定文本
到目前为止,它还没有真正成功。
在下面的代码,我需要检测B模版被递归调用:
<xsl:template name="A">
blah blha [email protected]#?%$#^%?*?&(({}:"><;'[]\/.,./'
<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>
在这种特定的情况下,REG前是确定的。
在这种情况下,我删除了第二次调用B,正则表达式匹配最后一次调用B.这应该不会发生。
(<xsl:template name=\"(?<templateName>\w+)\">.*?(?<=<xsl:call-template name=\"\k<templateName>\">).*?</xsl:template>)+
我不是正则表达式大师。欢迎任何帮助。
谢谢。
重申明显的一点:不要尝试使用正则表达式解析XML或其他非常规语言。请。
使用XML解析器并查看生成的树。您可以创建模板调用的图表并查找周期。应该是一个更强大的解决方案,而不是试图用正则表达式来破解它。这样,您也可以检测到模板A可能会调用模板B,该模板调用模板C并再次调用模板A.这种类型的递归对于你当前的方法是不可见的(如果它可以被说服工作的话)。
我同意,正则表达式不是完美的工具。 但是,我正在做一个可以运行一次的小工具,也许是两次。我想快速创造一些东西,我能否接受这样的事实,即像你所描述的一些呼叫不会被发现。我不想长时间参与这个项目。 你可以建议我一个你认为合适的XML解析器工具吗? 如果有帮助:我打算在powershell或iron python中使用脚本在多个文件上运行此正则表达式。 感谢您的意见。 – 2009-10-06 16:34:31
好吧,几乎所有的语言都有处理XML的设施,只需走节点可能不需要太多的努力。但我通常不这样做,因此在处理XML方面并不精通。 – Joey 2009-10-06 16:43:28
@ Jean-Francois:PowerShell内置了非常强大的XML支持。请参阅http://powershell.com/cs/blogs/ebook/archive/2009/03/30/chapter-14-xml.aspx – TrueWill 2009-10-06 17:46:20
不要使用正则表达式来解决这个问题。 – 2009-10-06 15:53:16
同一句子中的“正则表达式”和“递归”是一个好兆头,表示您将遇到麻烦。需要“嵌套”的语言是不规则的,这意味着你无法精确地将它们与正则表达式匹配。一些正则表达式的实现可以让你做一些非常规的事情(例如:反向引用),但是一般来说,如果你试图匹配的东西不是普通的语言,我不会使用正则表达式。 – 2009-10-06 16:35:08