第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

沒有災(zāi)難回溯的簡單字母數(shù)字正則表達(dá)式(單個(gè)間距)

沒有災(zāi)難回溯的簡單字母數(shù)字正則表達(dá)式(單個(gè)間距)

胡子哥哥 2019-11-21 09:41:17
我有以下REGEX表達(dá)式(有效)以允許字母數(shù)字(以及'和-)并且沒有雙倍空格:  ^([a-zA-Z0-9'-]+\s?)*$由于嵌套分組,因此可以進(jìn)行災(zāi)難性的回溯-太糟糕了!如何簡化此表達(dá)式以避免災(zāi)難性回溯? (理想情況下,第一個(gè)和最后一個(gè)字符都不允許有空格)
查看完整描述

1 回答

?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

說明

嵌套組不會(huì)自動(dòng)導(dǎo)致災(zāi)難性的回溯。在您的情況下,這是因?yàn)槟恼齽t表達(dá)式退化為災(zāi)難性回溯的經(jīng)典示例(a*)*。


由于\s在可選in中^([a-zA-Z0-9'-]+\s?)*$,在輸入時(shí)沒有任何空格,但字符在允許列表之外,因此正則表達(dá)式簡單地退化為^([a-zA-Z0-9'-]+)*$。


您還可以考慮原始正則表達(dá)式的擴(kuò)展:


[a-zA-Z0-9'-]+\s?[a-zA-Z0-9'-]+\s?[a-zA-Z0-9'-]+\s?[a-zA-Z0-9'-]+\s?...

由于\s是可選的,因此我們可以將其刪除:


[a-zA-Z0-9'-]+[a-zA-Z0-9'-]+[a-zA-Z0-9'-]+[a-zA-Z0-9'-]+...

并且我們得到了一系列連續(xù)的[a-zA-Z0-9'-]+,它們將嘗試所有方式在它們之間分配字符并消除復(fù)雜性。


編寫正則表達(dá)式進(jìn)行匹配的標(biāo)準(zhǔn)方法token delimiter token ... delimiter token是token (delimiter token)*。雖然可以重寫regex避免重復(fù)token,但我建議不要這樣做,因?yàn)楹茈y正確處理它。為了避免重復(fù),您可能希望通過字符串串聯(lián)來構(gòu)造正則表達(dá)式。


按照上面的食譜:


^[a-zA-Z0-9'-]+(\s[a-zA-Z0-9'-]+)*$

盡管您可以在這里看到重復(fù)中的重復(fù),但是由于正則表達(dá)式只能擴(kuò)展為:


[a-zA-Z0-9'-]+\s[a-zA-Z0-9'-]+\s[a-zA-Z0-9'-]+\s[a-zA-Z0-9'-]+...

而\s和[a-zA-Z0-9'-]是互斥的-只有一種方式來匹配任何字符串。


查看完整回答
反對 回復(fù) 2019-11-21
  • 1 回答
  • 0 關(guān)注
  • 460 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)