Regex 菜单id正则表达式挑战

Regex 菜单id正则表达式挑战,regex,coldfusion,Regex,Coldfusion,我目前正在使用下面的伪代码块来修复我遇到的一个正则表达式问题。目前,我使用正则表达式查找/删除基于id的各种菜单项,但是,它仅适用于子项,而不适用于父项记录。因此,在本例中,我试图删除id53,如果您运行伪代码,您将看到它破坏了树b/c的结构,它不会删除整个/code>块 有人知道如何调整我们正在使用的正则表达式测试模式吗?我真的很感谢你的帮助,希望你有一个伟大的一周 <cfsavecontent variable="pseudo"> <ul id="nav-main-link

我目前正在使用下面的伪代码块来修复我遇到的一个正则表达式问题。目前,我使用正则表达式查找/删除基于id的各种菜单项,但是,它仅适用于子项,而不适用于父项记录。因此,在本例中,我试图删除id53,如果您运行伪代码,您将看到它破坏了树b/c的结构,它不会删除整个
  • /code>块

    有人知道如何调整我们正在使用的正则表达式测试模式吗?我真的很感谢你的帮助,希望你有一个伟大的一周

    <cfsavecontent variable="pseudo">
    <ul id="nav-main-links">
        <li class="standby" id="id61"><a href="/?event=User.Home.dspHome" target="_self" title="Home"> Home<font class="menuItemType">(CB)</font></a>
        <li class="standby" id="id53"><a href="/contactus.cfm" target="_self" title="Contacts"> Contacts<font class="menuItemType">(L)</font></a>
        <ul class="sub-nav-main-links nestingLevel1">
            <li class="standby" id="id54"><a href="http://test/index.cfm" target="_self" title="Ven"> Ven<font class="menuItemType">(X)</font></a></li>
            <li class="standby" id="id55"><a href="http://test/spEvents.cfm" target="_self" title="SponsorShip"> SponsorShip<font class="menuItemType">(L)</font></a></li>
        </ul>
        </li>
    </ul>
    </cfsavecontent>
    <cfscript>
        myDisplay=structnew();
        myDisplay.pseudo=pseudo;
        myDisplay.IdsToRemove="53";
        myDisplay.RegExTestPattern='<li[^>]*?id="id(' & myDisplay.IdsToRemove & ')".*?li>';
        myDisplay.Menu=reReplaceNoCase(myDisplay.pseudo,myDisplay.RegExTestPattern,"","All");   
    </cfscript>
    <cfdump var="#myDisplay#">
    
    
    
    myDisplay=structnew(); myDisplay.pseudo=pseudo; myDisplay.IdsToRemove=“53”; myDisplay.RegExTestPattern=']*?id=“id('&myDisplay.IdsToRemove&')”*?li>; myDisplay.Menu=reReplaceNoCase(myDisplay.pseudo,myDisplay.RegExTestPattern,“,”All”);
    编写正则表达式解决方案需要一个递归正则表达式,我不知道CFML是否支持它。正如我所评论的,xmldom操作是一条出路。它看起来像这样(未经测试,因为我无法访问ColdFusion服务器)

    
    
    myDisplay=structnew(); myDisplay.IdsToRemove=“53”; idVal='id'&myDisplay.IdsToRemove; xmlTree=xmlParse(伪); liList=xmlSearch(xmlTree,//li[@id=“”&idVal&“]”); arrayDeleteAt(liList,0); myDisplay.pseudo=toString(xmlTree);
    我知道这并不能回答你的问题,但正则表达式对于这项工作来说是错误的工具。你应该使用某种DOM库来完成这项工作。我相信这可以通过一百万种不同的方式来完成,但我希望用正则表达式来修复它。问题是,正则表达式足够聪明,可以检测到打开的
  • 错误ld标记,然后忽略下一个结束标记将是一个非常复杂的过程。是的,我知道,一直在努力。我知道这是可能的。问题是它正在找到正确的起点,只需要调整终止点spot@Chris当前位置正则表达式解决方案确实是一种错误的方法,除非你是被迫这样做的ldFusion可以操作XML文档树,你应该利用它。我现在给你做一些测试,让你知道,非常感谢你的帮助好的,我真的很喜欢这是怎么回事,但是,有问题的字符串被缩小了,所以我必须想办法让xmlparse处理它。单字符串转换正在实现也是一种痛苦:(@chris hough:如果它被适当地缩小,它应该保持为有效的XML。但是我注意到你有四个
  • 开始标记,只有三个
  • 结束标记。如果你的数据真的是这样,那么你将无法使用任何方法来处理它。不确定你所说的单字符串转换是什么意思。我正在重新编写m现在将整个过程转换为XML,您是对的,我的设置是错误的。谢谢您的指导,我非常感谢。