Java中慎用正則表達(dá)式夕玩!代碼性能影響你弦?

1.什么是正則表達(dá)式

簡(jiǎn)單來(lái)說(shuō),就是使用一些特定的元字符來(lái)檢索燎孟、匹配禽作、替換符合規(guī)則的字符串。

2.正則表達(dá)式引擎

正則表達(dá)式就是一串符號(hào)揩页,程序需要去分析它旷偿,并且建立一個(gè)語(yǔ)法樹(shù),然后根據(jù)這個(gè)樹(shù)執(zhí)行程序爆侣。這個(gè)程序就叫做狀態(tài)機(jī)萍程。
(1)DFA【確定有限狀態(tài)自動(dòng)機(jī)】【時(shí)間復(fù)雜度O(n)】
(2)NFA【非確定有限狀態(tài)自動(dòng)機(jī)】【時(shí)間復(fù)雜度O(ns)】
對(duì)比一下,DFA執(zhí)行效率大于NFA兔仰。在編程語(yǔ)言里茫负,都是使用NFA。

3.那么正則是如何匹配的乎赴?簡(jiǎn)單梳理一下

text = "aabcab";
regex = "bc"
拿正則第一個(gè)字符去匹配b---a失敗忍法,b----a,失敗无虚。
然后是b---b缔赠,這時(shí)候匹配上了衍锚。
下一步就是拿第二個(gè)字符c---c 剛好匹配上了友题。這時(shí)候就成功了。

4.以上是一個(gè)簡(jiǎn)單的理想化的匹配戴质,NFA是如何回溯的呢度宦??

text = "abbc"
grex = "ab{1,3}c"
這個(gè)匹配的流程
首先正則第一個(gè)字符a---a 告匠,匹配成功
第二個(gè)b---b戈抄,成功。但是這時(shí)候
第三個(gè)還是b后专,因?yàn)閧1,3}划鸽,所有還是b---c.這時(shí)候就匹配失敗
這時(shí)候就發(fā)生了回溯。第三個(gè)b---指定的還是b.而不是C戚哎。

5.避免回溯問(wèn)題怎么辦裸诽?

(1)獨(dú)占模式
text=“abbc”
regex=“ab{1,3}+bc”
就是匹配不到就直接返回匹配結(jié)束。不存在回溯型凳。
(2)懶惰模式【加個(gè)丈冬?號(hào)】
text=“abc”
regex=“ab{1,3}?c”
只匹配一個(gè)b.如果后續(xù)不成功,也不回溯甘畅。
(3)減少分支
例如埂蕊,將“(abcd|abef)”替換為“ab(cd|ef)”
因?yàn)槿绻惶鎿Q往弓,ab可能會(huì)匹配多次。提取出來(lái)蓄氧,只需要匹配一次

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末函似,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匀们,更是在濱河造成了極大的恐慌缴淋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泄朴,死亡現(xiàn)場(chǎng)離奇詭異重抖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)祖灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)钟沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人局扶,你說(shuō)我怎么就攤上這事恨统。” “怎么了三妈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵畜埋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畴蒲,道長(zhǎng)悠鞍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任模燥,我火速辦了婚禮咖祭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔫骂。我一直安慰自己么翰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辽旋。 她就那樣靜靜地躺著浩嫌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪补胚。 梳的紋絲不亂的頭發(fā)上码耐,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音糖儡,去河邊找鬼伐坏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛握联,可吹牛的內(nèi)容都是我干的桦沉。 我是一名探鬼主播每瞒,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纯露!你這毒婦竟也來(lái)了剿骨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤埠褪,失蹤者是張志新(化名)和其女友劉穎浓利,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钞速,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贷掖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渴语。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苹威。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驾凶,靈堂內(nèi)的尸體忽然破棺而出牙甫,到底是詐尸還是另有隱情,我是刑警寧澤调违,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布窟哺,位于F島的核電站,受9級(jí)特大地震影響技肩,放射性物質(zhì)發(fā)生泄漏且轨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一亩鬼、第九天 我趴在偏房一處隱蔽的房頂上張望殖告。 院中可真熱鬧阿蝶,春花似錦雳锋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至筑煮,卻和暖如春辛蚊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背真仲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工袋马, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秸应。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓虑凛,卻偏偏與公主長(zhǎng)得像碑宴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桑谍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 匹配基礎(chǔ) 對(duì)于正則表達(dá)式延柠,有兩條普適原則: 優(yōu)先選擇最左端的匹配結(jié)果; 標(biāo)準(zhǔn)的匹配量詞(*锣披、+贞间、?和{min, m...
    戴小白閱讀 4,157評(píng)論 1 6
  • 作為前端大佬的你,想必對(duì)于 JavaScript 的正則表達(dá)式非常熟悉了雹仿,甚至隨手就能利用正則表達(dá)式寫(xiě)出一些驚世駭...
    NARUTO_86閱讀 25,760評(píng)論 1 8
  • 前幾天線(xiàn)上一個(gè)項(xiàng)目監(jiān)控信息突然報(bào)告異常增热,上到機(jī)器上后查看相關(guān)資源的使用情況,發(fā)現(xiàn) CPU 利用率將近 100%胧辽。通...
    java菜閱讀 387評(píng)論 0 0
  • 正則手記_本人自學(xué)實(shí)踐的一部分筆記+個(gè)人粗淺的理解 注:正則表達(dá)式钓葫,不是程序員的專(zhuān)屬工具,我等非程序員也可以拿來(lái)提...
    恒若水_2049閱讀 966評(píng)論 0 2
  • 杯子 總是凝望著一只杯子與桌面形成的...
    隱水鄭歌閱讀 636評(píng)論 0 1