我的意图是我需要匹配标记内部有HTML
方括号标记的freemarker
个标记。
示例:
<img src="[#if]logo.jpg[#else]logosmall.jpg[/#if]" />
或
<a href="[#if]logo.jpg[#else]logosmall.jpg[/#if]">See logo</a>
到目前为止,我有这个正则表达式(<)([a-z][a-z0-9]*)[\s\S]+(\[\#[a-z][\s\S]*\])[\s\S]+([^>]+?\/>|>(.*?)(<\/\2>))
,你可以在下面的链接上测试一个很好的例子
正如您所看到的,它“相当”正常,但它在开头匹配了一些额外的标记html
和body
。
我想在具有否定前瞻((?![<][a-z][a-z0-9]*)
)的freemarker标记之前否定任何其他开始标记的发现,但它不起作用。
答案 0 :(得分:2)
您的问题出在[\s\S]+
部分。此部分相当于匹配所有内容,因为\S
表示不 \s
的所有内容...在此模式下,可以捕获所有标记,以及自由文本等。
我不确定这个正则表达式正是你所需要的,但它应该让你朝着正确的方向前进:
(<)([a-z][a-z0-9]*)[^>]+(\[\#[a-z][^\]]*\])[^>]+([^>]+?\/>|>(.*?)(<\/\2>))