我有兩個正則表達式模式,我正在使用vC++程序進行輸入字符串匹配。這兩種模式匹配導致堆分配失敗..所以我想重寫它們。我正在使用regex_search()api調用。如何重寫給定的貪婪正則表達式模式?
請讓我知道如何重寫它們,使它們不會變得貪婪,從而避免崩潰。
(\%3E)(.)*(\%3C)
>.*</?(\w|\s)*\b(script|applet)\b
代碼:
cmatch regexMatch;
regex_search(pbuf, regexMatch, regex(iter.second, regex_constants::icase), regex_constants::match_any);
輸入緩衝器:
STATE[2]=TX&SHIPTOPHONE[10]=1111111111&SUBMIT=Continue+for+xxxxxxxxx+xxxx+%3EIGT&DISCOUNT[4]=0.00&_PRODUCTCODE[1]=0&TEMPLATE[9]=xxxxxxxxx&METHOD[2]=xx&VENDOR[9]=xxxxxxxxx&SHIPTOFIRSTNAME[6]=xxxxxx&SHIPTOEMAIL[18][email protected]&PARTNER[8]=xxxxxxxx&SHIPTOSTATE[2]=xx&DUTYAMT[4]=0.00&CITY[10]=xxxxxxxxxx&COUNTRYCODE[2]=XX&DESCRIPTION[4]=aepn&TRXTYPE[1]=S&PHONENUM[10]=1111111111&USER2[10]=22.2.22.22&FREIGHTAMT[4]=0.00&_HOSTEDCODE[1]=1&PWD[28]=XXXXXXXXXXXXXXXXXXXXXXXXXXXXSHIPTOCITY[10]=xxxxxxxxxx&_PAYMENTCODE[1]=1&LASTNAME[8]=xxxxxxxx&TENDER[1]=C&SHIPTOZIP[5]=80000&USER[14]=xxxxxxxxxXXXXX&AMT[5]=10.05&EXECUTOR[12]=xxxxxxxxxXXX&ZIP[5]=80000&EXPDATE[4]=0101&TAXAMT[4]=0.00&COUNTRY[2]=US&PLAN[4]=teen&CURRENCY[3]=USD
謝謝!普尼特
將'*'更改爲'*?'使其非貪婪。 – Barmar
你確定要'(。)*'而不是'(。*)'嗎?使用'(。)*',您只能捕獲第一個字符,而不是整個文本塊。 – Barmar
如果存在多種匹配正則表達式的方式(例如'%3Exxx%3Cxxx%3C'),那麼它是否會發現不匹配的問題? – Laurel