регулярное выражение для удаления пунктов меню из строки - PullRequest
0 голосов
/ 08 марта 2012

Я работаю со следующим блоком кода:

<UL id="nav-main-links"> <li class="standby" id="id61"> <a href="/?event=User.Home.dspHome" target="_self" title="Admin Tools"> Admin Tools<font class="menuItemType">(CB)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id62"> <a href="/unsecured/sitesurvey.cfm" target="_blank" title="Site Survey"> Site Survey<font class="menuItemType">(X)</font> </a> </LI></UL></LI> <li class="standby" id="id57"> <a href="/?event=Mall.Information.dspInformation" target="_self" title="Mall Info"> Mall Info<font class="menuItemType">(CB)</font> </a> </LI> <li class="standby" id="id19"> <a href="/?event=SMS.SMSbroadcast.browseSMSbroadcasts" target="_self" title="Send sms text messages to your groups"> SMS<font class="menuItemType">(CB)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id58"> <a href="/?event=SMS.SMSgroup.browseSMSgroups" target="_self" title="SMS Groups"> Groups<font class="menuItemType">(CB)</font> </a> </LI> <li class="standby" id="id59"> <a href="/?event=SMS.SMSkeyword.browseSMSkeywords" target="_self" title="SMS Keywords"> Keywords<font class="menuItemType">(CB)</font> </a> </LI></UL></LI> <li class="standby" id="id56"> <a href="/?event=Mall.Directory.dspList" target="_self" title="Directory"> Directory<font class="menuItemType">(CB)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id35"> <a href="/?event=Mall.Directory.dspAdd" target="_self" title="Add New"> Add New<font class="menuItemType">(CB)</font> </a> </LI></UL></LI> <li class="standby" id="id2"> <a href="/admin2/mall/mallinfo.cfm" target="_self" title="Mall Info"> Mall Info<font class="menuItemType">(L)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id17"> <a href="/sidefeature" target="_self" title="Side Features"> Side Features<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id18"> <a href="/admin2/misc/lakeElsinore/homepage.cfm" target="_self" title="Edit Homepage"> Edit Homepage<font class="menuItemType">(L)</font> </a> </LI></UL></LI> <li class="standby" id="id22"> <a href="/events/index.cfm" target="_self" title="Events"> Events<font class="menuItemType">(L)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id23"> <a href="/admin2/bDayClub/index.cfm" target="_self" title="Birthday Club"> Birthday Club<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id24"> <a href="/admin2/misc/12days.cfm" target="_self" title="12 Days Points"> 12 Days Points<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id25"> <a href="/admin2/darkSite/dsForm.cfm" target="_self" title="Emergency Info"> Emergency Info<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id26"> <a href="/admin2/mnog/mnog.cfm" target="_self" title="MNOG"> MNOG<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id27"> <a href="/admin2/mnog/eforl.cfm" target="_self" title="Earning for Learning"> Earning for Learning<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id28"> <a href="/admin2/partners/partners.cfm" target="_self" title="Partners"> Partners<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id29"> <a href="/admin2/events/raceForReceipts.cfm" target="_self" title="Race for Receipts"> Race for Receipts<font class="menuItemType">(L)</font> </a> </LI></UL></LI> <li class="standby" id="id30"> <a href="/admin2/mall/MallHours.cfm" target="_self" title="Hours"> Hours<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id31"> <a href="/admin2/mall/dir/" target="_self" title="Directory"> Directory<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id32"> <a href="https://www.google.com/accounts/login" target="_self" title="Google Analytics"> Google Analytics<font class="menuItemType">(X)</font> </a> </LI> <li class="standby" id="id33"> <a href="/admin2/mall/fpurl/poolb.cfm" target="_self" title="I-Features"> I-Features<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id34"> <a href="/admin2/Mall/FPURL/PressReleaseUrban.cfm" target="_self" title="Press Releases"> Press Releases<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id36"> <a href="/admin2/store/retailerNav.cfm" target="_self" title="Retail"> Retail<font class="menuItemType">(L)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id37"> <a href="/admin2/coupons/coupondirect.cfm" target="_self" title="Coupons"> Coupons<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id38"> <a href="/storeOffers/" target="_self" title="License To Shop"> License To Shop<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id39"> <a href="/admin2/Jobs-old/old/jobAdmin.cfm" target="_self" title="Jobs"> Jobs<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id40"> <a href="/admin2/store/modStore.cfm?mode=sales" target="_self" title="Sales and Events"> Sales and Events<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id41"> <a href="/admin2/MDB/" target="_self" title="MDB Data"> MDB Data<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id42"> <a href="http://mdb2.mallfinder.com/retail%20hub/" target="_self" title="MDB Application"> MDB Application<font class="menuItemType">(X)</font> </a> </LI> <li class="standby" id="id43"> <a href="/admin2/MDB/Reports/index.cfm" target="_self" title="Swipe Reports"> Swipe Reports<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id44"> <a href="/admin2/mallSlideShows.cfm" target="_self" title="Slide Shows"> Slide Shows<font class="menuItemType">(L)</font> </a> </LI></UL></LI> <li class="standby" id="id45"> <a href="/email/epostCard.cfm" target="_self" title="Email"> Email<font class="menuItemType">(L)</font> </a> <UL class="sub-nav-main-links nestingLevel1"> <li class="standby" id="id46"> <a href="/email/admEmail.cfm" target="_self" title="AdmEmail"> AdmEmail<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id47"> <a href="/email/ddrEPostCard.cfm" target="_self" title="DDR Email"> DDR Email<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id48"> <a href="/email/epnew.cfm" target="_self" title="New Email"> New Email<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id50"> <a href="/email/emailReport.cfm" target="_self" title="Email Report"> Email Report<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id51"> <a href="/directMail/index.cfm" target="_self" title="Direct Mail"> Direct Mail<font class="menuItemType">(L)</font> </a> </LI> <li class="standby" id="id52"> <a href="/workflow/workflow_Entryform.cfm" target="_self" title="Change Orders"> Change Orders<font class="menuItemType">(L)</font> </a> </LI></UL></LI> <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://vendor1.retailhub.com/index.cfm" target="_self" title="Ven"> Ven<font class="menuItemType">(X)</font> </a> </LI> <li class="standby" id="id55"> <a href="/SponsorShip/spEvents.cfm" target="_self" title="SponsorShip"> SponsorShip<font class="menuItemType">(L)</font> </a> </LI></UL></LI></UL> 

и следующим псевдоблоком в cfml:

<cfscript>
    myDisplay=structnew();
    myDisplay.pseudo=pseudo;
    myDisplay.IdsToRemove="60|61";
    myDisplay.RegExTestPattern='<li[^>]*?!id="id(' & myDisplay.IdsToRemove & ')".*?li>';
    myDisplay.Menu=reReplaceNoCase(myDisplay.pseudo,myDisplay.RegExTestPattern,"","All");   
</cfscript>

Я пытаюсь переработать шаблон регулярного выражения, чтобы он удалил всеLI с идентификаторами! = от 1 до x значений, т.е. 60 | 61.Идеи?

1 Ответ

1 голос
/ 08 марта 2012

Я ничего не могу поделать с холодной частью процесса, но регулярные выражения не слишком сложны. Они просто не всегда являются подходящим инструментом для работы.

Прежде всего, помните, что регулярные выражения не выполняют числовых вычислений. Таким образом, чтобы сделать что-то вроде номеров совпадений от 56 до 61, вам нужно будет использовать /(5[6-9]|6[01])/ или /(56|57|58|59|60|61)/. Так что вам нужно будет построить свои диапазоны номеров как шаблоны.

Итак ... RE, который соответствует определенному элементу списка, может быть:

/ <li class="standby" id="id${RE}"> .*? <\/LI>/

При этом используется .*?, «ленивая звезда», которая расширяется до минимально возможных символов, требуемых для соответствия ... то есть при следующем появлении </LI>. Это усложняет то, что вы вложили <UL> с. Так что ленивая звезда не всегда доставит вас в нужное место.

Хотя может быть возможным для достижения этого с помощью необычного RE в стиле Perl, я не думаю, что это может быть достигнуто в расширенном RE. Я не знаю, понимает ли Coldfusion Perl REs.

Возможно, вы захотите исследовать, используя что-то вроде XPath для просмотра HTML, вместо создания большого грубого регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...