嵌套标签的正则表达式

时间:2018-07-10 04:54:55

标签: regex nested

我正在开发扩展程序以突出显示一些自定义脚本代码,并且我需要一个正则表达式来捕获<>(包括外部标签和嵌套标签)之间的文本

示例链接: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,我的问题是标签的命名(内容)不像这些语言一样,我必须仅匹配标签<>。

0 个答案:

没有答案