我正在开发扩展程序以突出显示一些自定义脚本代码,并且我需要一个正则表达式来捕获<>(包括外部标签和嵌套标签)之间的文本
示例链接:https://regex101.com/r/7AkKRU/1
或
小型演示(需要捕获的内容将被评论):
IF !(<isempty <ctag.add_sub>>) //<isempty <ctag.add_sub>>
if (<ctag0.add_sub_page>) //<ctag0.add_sub_page>
local.index=<eval 14*<ctag.add_sub_page>> //<eval 14*<ctag.add_sub_page>>
endif
local.sub=<LDB.Row.<dctag.add_sub>.subsection> //<LDB.Row.<dctag.add_sub>.subsection>
LDB.query "SELECT rowid,description FROM <ctag.add_mode> WHERE subsection = '<local.sub>'" //<ctag.add_mode> <local.sub>
dtext 516 45 0480 Page (<eval <ctag0.add_sub_page>+1>/<eval (<ldb.row.numrows>/14)+1>) //<eval <ctag0.add_sub_page>+1> <eval (<ldb.row.numrows>/14)+1>
for 0 13
local.desc=<ldb.row.<dlocal.num>.description> //<ldb.row.<dlocal.num>.description>
if (<dlocal.num>< <ldb.row.numrows>) //<dlocal.num> <ldb.row.numrows>
button 760 <dlocal.dy> 4005 4007 1 0 <eval 100000+<dlocal.rowid>> //<dlocal.dy> <eval 100000+<dlocal.rowid>>
endif
endfor
IF (<ldb.row.numrows> > <eval <local.index>+14>) //<ldb.row.numrows> <eval <local.index>+14>
endif
endif
此刻我有以下正则表达式(抱歉,我不记得我从哪里复制的):
(?=\<)(?:(?=.*?\<(?!.*?\1)(.*\>(?!.*\2).*))(?=.*?\>(?!.*?\2)(.*)).)+?.*?(?=\1)[^\<]*(?=\2$)
它工作正常,,但是当>是该行的最后一个元素时,它将捕获额外的内容。
更新: 这被标记为重复,但不相同(即使它们非常相似),这不适用于HTML / XHTML / XML,我的问题是标签的命名(内容)不像这些语言一样,我必须仅匹配标签<>。