精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探秘自動機原理與優化實踐

移動開發
自動機廣泛應用在Linux的各種文本搜索工具以及各類的正則表達式匹配庫中,是進行正則表達式匹配的必備技術。自動機理論和圖靈機理論一樣,是現代信息技術大廈的關鍵核心基礎理論。本文將從理論與應用的角度揭秘自動機原理與實踐優化。

自動機概況

使用Linux開發環境的程序員一定使用過sed、grep、lex等Linux系統工具,sed、grep是Linux中重要的數據流搜索與處理工具,Lex是linux下廣泛使用的詞法分析器生成器,用于復雜語言的解析、編譯器前端的開發等。盡管這些Linux系統工具功能各異,但這些工具內部都實現了一個自動機,用于對輸入預料進行基于正則表達式的文本搜索。自動機則是正則表達式的等價實現。

從計算理論上講,正則表達式與自動機具有理論上的嚴格等價性,正則表達式和自動機具有等價的對匹配模式的定義能力。正則表達式是匹配模式的形式化表達,自動機則是對匹配模式的計算機實現的一種表達。

安全檢測與防護領域的入侵檢測系統(Intrusion Detection Systems,IDS)、入侵防護系統(Intrusion Prevention System, IPS)、web應用防火墻(Web Application Firewall,WAF)等都大量應用了自動機技術進行網絡數據流的正則表達式匹配,以實現對網絡報文的檢測與分析。

圖片

IPS/IDS與WAF系統

自動機技術也廣泛應用于DPI系統(Deep Packet Inspection,DPI)中,以實現對網絡報文的解析與識別。

圖片

應用于應用識別的DPI系統

2、正則表達式與自動機

2.1 初識正則表達式與自動機

在形式化語言與自動機理論中,正則表達式與有窮自動機有著理論上的嚴格等價性。

圖片

正則表達式與自動機的等價性

自動機分為確定型有窮自動機(Deterministic Finite Automata,DFA)和非確定型有窮自動機(Non-Deterministic Finite Automata,NFA)。確定型有窮自動機中,對于給定的確定狀態與確定輸入,其狀態轉移關系是確定唯一的,且每一時刻只存在一個激活狀態。相反,在非確定型有窮自動機中,對于給定的確定狀態與確定輸入,其可能存在多個狀態轉移關系,且某一時刻可能存在多個的激活狀態。非確定型有窮自動機又主要分為存在epsilon轉移的epsilon-NFA與沒有epsilon轉移的NFA,其經典代表分別為Thompson NFA與Gluskov NFA。

圖片

Thompson NFA

上圖所示為識別正則表達式(AB|CD)*AFF*的Thompson NFA,可見thompson NFA由基本的子正則表達式NFA單元通過epsilon邊連接而成,epsilon邊連接的兩個狀態可以由空字符進行轉移,即存在無條件的狀態轉移關系,由字母標識的邊連接的兩個狀態表明這兩個狀態之間需要輸入對應的字符才能進行激活狀態的轉移。

圖片

Gluskov NFA

上圖所示為識別正則表達式(AB|CD)*AFF*的Gluskov NFA。顯而易見,Gluskov NFA比Thompson NFA要簡潔很多,且Glukov NFA中NFA的狀態數與正則表達式中出現的字符和字符集總數一致。相比于Thompson NFA,Gluskov NFA狀態數更少,結構更緊湊。同時在Gluskov NFA中,狀態之間的跳轉條件被移到了節點內變成了節點的激活條件,因此Gluskov NFA的運行時處理也會變得更加簡單。在運行時讀入一個字符c時,便可知道字符c可以激活的狀態集reach(c),那么只需在Gluskov NFA當前的激活狀態集s的基礎上計算其后繼狀態集succ(s),并取reach(c)與succ(s)的交集,所得的交集即為Gluskov NFA的下一刻激活狀態集。對于Thompson NFA,節點的激活條件并不唯一,且需要處理epsilon邊連接的狀態轉移關系,其下一刻的激活狀態集的計算會更復雜。

對Thompson NFA或Gluskov NFA使用子集構造算法,可以將NFA轉化為DFA。DFA相較于NFA最大的優勢是性能,而劣勢在于空間開銷,這是因為DFA狀態轉移的確定性是通過對NFA不同狀態進行組合得到的,因此功能等價的DFA和NFA從理論上來說,DFA狀態數的上限是NFA狀態數的指數關系。

圖片

DFA狀態圖

上圖所示為使用子集構造算法將識別正則表達式(AB|CD)*AFF*的thompson NFA轉化為DFA后的狀態圖。圖中每個藍色框的序號集中的序號對應于thompson NFA中狀態的序號,體現了DFA中的每個狀態對應于NFA狀態集的一個子集。

2.2 主流的開源自動機相關庫

目前廣泛使用的主流開源自動機相關庫主要是Pcre、RE2、Hyperscan

  • Pcre支持的正則表達式語法是最全最復雜的,但PCRE只支持塊模式編譯和匹配,并且只支持單條正則表達式的編譯和匹配,性能在這三款軟件中是最差的。對于需要進行大規模正則規則并行匹配的場景,pcre就顯得力不從心了。
  • Google的開源正則匹配引擎RE2是基于虛擬機方法c++實現的一款快速、安全、線程友好的正則匹配自動機,支持的正則表達式語法比pcre少但比hyperscan多。RE2支持少量正則規則集的并行匹配,不支持只能用回溯算法實現的正則表達式語法。
  • Hyperscan是Intel開源的一款基于正則表達式NFA/DFA圖分析與拆解的高性能正則表達式混合自動機。在這三款軟件中,hyperscan支持的正則語法最少,但其性能是最強的,且支持大規模正則規則集的并行匹配。


3、自動機的性能優化實踐

正則表達式的匹配速率是制約IDS/IPS、WAF、DPI等業務的重要性能瓶頸。提升正則表達式自動機的匹配性能是提升以上業務能力的關鍵所在,下面介紹自動機性能優化的幾種主流方法。

3.1 基于預過濾的性能優化

圖片

基于預過濾的正則表達式優化策略

上圖所示為基于字符串匹配器預過濾的正則表達式匹配優化策略。該方案會在正則表達式的編譯過程中提取正則表達式中的字符串信息,并根據提取的字符串構建一個多字符串預匹配器。如針對規則0,提取了字符串SEARCH,針對規則N提取了字符串SUBSCRIBE。在對輸入預料進行匹配的過程中,會先使用多字符串匹配器進行字符串的匹配,若匹配過程中匹配到了字符串SERACH但是沒有匹配到字符串SUBCRIBE,則會進一步使用根據正則表達式規則0構建的自動機進行第二階段的正則表達式匹配。可見基于預過濾的正則表達式匹配方案為一個兩階段的匹配過程。

基于字符串匹配器的預過濾正則表達式匹配方案雖然能提早過濾掉無法匹配的語料。但仍然存在以下的諸多不足:

(1)對正則表達式中的字符串存在重復匹配,即預過濾的字符串匹配組件匹配一次字符串,自動機又重復匹配一次字符串;

(2)基于預過濾的匹配方案中的第二階段,使用自動機對字符串進行匹配難以有效地使用CPU的SIMD指令集進行字符串匹配的并行加速;

(3)不合理的關鍵字符串選擇容易拖累整體正則表達式的匹配性能。

針對基于字符串匹配器預過濾的正則表達式匹配方案的不足,一種更新穎有效的基于正則表達式分解的正則表達式匹配方案便應運而生了。

3.2 基于正則表達式分解的性能優化

基于正則表達式分解的正則表達式匹配方案首先會將正則表達式拆解成幾個子字符串和子正則表達式。拆解的子字符串會被構建為一個字符串匹配器(字符串匹配器可以有效地使用CPU的SIMD指令集進行并行加速,相比于使用自動機匹進行字符串配具有數量級上的性能優勢),而拆解的子正則表達式則會被構建為一個子自動機,如NFA或DFA。在對輸入語料進行正則表達式匹配時,該方案會按照一定順序調用各個匹配器,并盡量優先調用字符串匹配器進行字符串的匹配,只有當前一個匹配器匹配成功后才會調用下一個匹配器進行匹配,并且只有當所有的匹配器都按照既定的順序匹配成功后,整條拆解的正則表達式才真正匹配成功。

圖片

基于規則拆分的正則表達式匹配策略

上圖所示為使用拆解后的正則表達式.*start[^x]comA+匹配輸入字符串AstarZcomA的一個示例。首先,正則表達式被拆解為五個部分,分別對應于自動機部分FA2、FA1、FA0與字符串部分STR2、STR1。拆解后構造的各個子自動機與子字符串匹配器的匹配順序為STR1->STR2->FA1->FA0->FA2。拆解后構造的各個子自動機與子字符串遵循一下的優先級原則:

  • 字符串匹配優先于自動機匹配。
  • 兩個字符串中間的自動機匹配優先于其它位置的自動機匹配。
  • 匹配語料尾部的自動機優先于匹配語料頭部的自動機。

第一條優先級原則很好理解,在于字符串匹配速率相對于自動機匹配速率有著數量級上的性能優勢。兩個字符串之間的自動機所需匹配的語料的行首和行尾是錨定的,因此它的優先級相對于其它自動機優先級較高,即優先級原則2。由于匹配語料尾部的自動機其匹配的行首是錨定的無需回溯操作,所以其優先級較高,即優先級原則3。可見,拆解后的各子自動機與子字符串匹配器的匹配順序原則上遵循:性能開銷越小的匹配過程,其匹配順序越靠前。

對于輸入語料,AstarZcomA,首先會使用字符串匹配器匹配字符串STR1,此時字符串匹配成功,繼續調用字符串匹配器匹配字符串STR2,此時字符串STR2匹配失敗,則不再使用后續的FA1、FA0、FA2進行匹配。若輸入的字符串為AstartZcomA,則會依次成功匹配STR1、STR2、FA1、FA0、FA2,最后輸出匹配成功信息。

4、正則規則匹配的應用思考

在互聯網領域的各種開發與應用中,網絡進攻檢測、應用流量識別等大量的場景需要使用正則引擎進行正則表達式的匹配。正則表達式的匹配效率不僅取決于使用的正則引擎的性能好壞,也與書寫的正則表達式形式息息相關。揭秘正則引擎的實現原理能讓我們更深入了解正則表達式的形式與正則引擎效率的相關性,更好地指導我們進行正則引擎的性能調優。以下原則的正則表達式書寫指導意見能幫助我們在開發與應用過程中更高效地進行正則表達式的匹配:

  1. 盡量避免使用需要用回溯方法實現的正則表達式語法,如反向引用語法。回溯的引入會使最壞情況下正則匹配的時間復雜度呈指數的增長。
  2. 盡量在正則表達式中避免(.*)、{min,max}這樣的語法,(.*)引入的不確定性以及{min,max}帶來的有界重復是正則表達式引擎的重要性能瓶頸。
  3. 盡量將正則表達式寫得更確定,如盡量在正則表達式中寫更多確定的字符或字符串。
責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2023-10-23 07:13:04

2023-02-20 07:46:45

機器學習AI 技術

2025-02-08 08:10:00

2023-10-29 16:26:27

Python動查重

2017-07-27 10:46:44

神經網絡機器學習強化學習

2025-06-09 07:30:00

Kubernetes節點自動伸縮集群

2017-03-21 09:17:37

2020-12-18 07:42:30

機器學習數據科學

2013-04-17 10:06:55

Google GlasMirror API

2009-06-15 15:57:21

Spring工作原理

2020-05-22 09:12:46

HTTP3網絡協議

2025-01-10 09:47:43

blockSDKiOS

2024-12-25 16:01:01

2021-04-16 09:57:17

AI 數據人工智能

2019-06-04 09:26:35

UCloudUDB數據庫

2022-04-01 09:30:00

開源AutoXGBAPI

2022-10-28 13:41:51

字節SDK監控

2024-05-10 11:35:22

Redis延時隊列數據庫

2025-02-06 08:24:25

AQS開發Java
點贊
收藏

51CTO技術棧公眾號

青青草原av在线播放| 成人国产精品色哟哟| 欧美做受xxxxxⅹ性视频| 欧美一级网址| 亚洲成人av一区二区| 日韩在线第一区| www.色播.com| 日本不卡视频在线观看| 美女视频久久黄| 国产制服丝袜在线| 精品国产三区在线| 日韩欧美极品在线观看| 美国av在线播放| 青青青草网站免费视频在线观看| 蜜桃av一区二区在线观看| 欧美精品激情在线观看| 国产真人真事毛片视频| 久久久久观看| 日韩欧美国产综合在线一区二区三区 | 9i精品福利一区二区三区| 亚洲精品99| 亚洲人成在线观看网站高清| 亚洲AV成人精品| 日韩av黄色| 欧美性猛交xxxx久久久| 996这里只有精品| 在线播放麻豆| 久久久久久久网| 国产精品亚洲一区| 中文字幕精品一区二| 在线亚洲伦理| 久久久久久久999| 午夜69成人做爰视频| 不卡在线一区| 亚洲免费视频网站| 亚洲图片综合网| 视频一区在线| 日韩视频一区二区三区| 亚洲国产日韩欧美在线观看| 人人鲁人人莫人人爱精品| 亚洲成a人在线观看| 国产精品国产三级国产专区51| 日韩美女网站| 国产精品久久久久久久久图文区| 日韩啊v在线| 色视频免费在线观看| 99精品视频在线播放观看| 99理论电影网| 亚洲av无码国产精品久久不卡| 久久国产精品第一页| 国产精品视频一| 性色av一区二区三区四区| 老司机午夜精品视频| 欧美做受高潮1| 欧美国产成人精品一区二区三区| av成人毛片| 欧美亚洲成人xxx| 一级片视频在线观看| 蜜桃视频一区| 国产精品久久久久7777婷婷| 波多野结衣高清在线| 全部av―极品视觉盛宴亚洲| 国产精品入口夜色视频大尺度| 中文字幕+乱码+中文乱码91| 蜜桃av噜噜一区| 成人国产精品一区二区| 国产suv精品一区二区69| 国产麻豆精品在线| 国产伦精品一区二区三| 天天av天天翘| 欧美国产精品专区| 99re99热| aaa在线播放视频| 日韩欧美在线看| 国产aaaaa毛片| 精品国产亚洲一区二区三区大结局 | 久久成人亚洲精品| 国产精品第56页| 久久都是精品| 成人国产在线视频| 人人妻人人澡人人爽精品日本| 91欧美一区二区| 亚洲电影一二三区| 在线观看小视频| 福利视频第一区| 男人添女人下面免费视频| 97久久中文字幕| 亚洲国产成人在线播放| 无码h肉动漫在线观看| 日韩在线视屏| 高清欧美性猛交| 久草热在线观看| 国产大片一区二区| 清纯唯美一区二区三区| mm1313亚洲国产精品美女| 精品福利视频导航| 亚洲午夜激情影院| 日韩中文av| 久久视频在线看| 久久亚洲精品石原莉奈 | 精品久久久久久无码人妻| 亚洲裸色大胆大尺寸艺术写真| 色综合亚洲精品激情狠狠| 精品处破女学生| 秋霞国产午夜精品免费视频| 国产精品毛片va一区二区三区| 好男人免费精品视频| 有码一区二区三区| 日本美女高潮视频| 任你躁在线精品免费| 色老头一区二区三区| 免费日韩一级片| 国产一区二区在线观看免费| 欧美精品欧美精品系列c| 亚洲小说区图片| 欧美日韩国产美女| 巨胸大乳www视频免费观看| 亚洲在线久久| 国产剧情日韩欧美| 日本一卡二卡四卡精品| 亚洲午夜久久久久久久久电影网 | 国产www在线| 国产高清在线精品| 亚洲一区二区四区| 欧洲精品一区二区三区| 亚洲国产精品字幕| 欧美成人三级视频| 久久99国产精品成人| 日本一区二区三区www| 91九色在线播放| 日韩久久免费av| 中文字幕人妻一区二| 美女看a上一区| 日本一区高清在线视频| 亚洲少妇视频| 日韩精品中文字幕在线| 国产精品16p| 粉嫩在线一区二区三区视频| 青少年xxxxx性开放hg| 韩日精品一区| 色99之美女主播在线视频| 亚洲欧美日韩一区二区三区四区| 91丨porny丨最新| 日韩av三级在线| 青青草原在线亚洲| 欧美主播福利视频| 欧美婷婷久久五月精品三区| 欧美日韩亚洲网| 一级国产黄色片| 久久精品人人| 欧美日韩精品综合| 国产经典一区| x99av成人免费| 国产精品久久久久久久免费看 | 亚洲精品乱码久久久久久蜜桃91| 在线毛片观看| 亚洲视频在线免费观看| 真实的国产乱xxxx在线91| 波多野结衣视频一区| 成人黄色av片| 欧美猛男男男激情videos| 国产精品久久久久7777婷婷| 日本电影全部在线观看网站视频| 欧美伦理视频网站| 国产a免费视频| www.欧美精品一二区| www黄色日本| 国产一区国产二区国产三区| 国产免费一区二区三区在线能观看| 麻豆国产尤物av尤物在线观看| 99国产精品免费视频观看| 亚洲精品欧美日韩专区| 91九色porn在线资源| 91年精品国产| 成熟了的熟妇毛茸茸| 第四色成人网| 亚洲va国产va天堂va久久| 免费在线观看av电影| 亚洲欧美日韩国产中文| 50一60岁老妇女毛片| 秋霞电影网一区二区| 国产性生活免费视频| 精品资源在线| 国产一区二区在线播放| 狂野欧美性猛交xxxxx视频| 亚洲精品国产精品久久清纯直播| 波多野结衣啪啪| 亚洲女同一区二区| 添女人荫蒂视频| 久久99久久久久久久久久久| 日韩久久久久久久久久久久| 午夜a一级毛片亚洲欧洲| 成人国产精品免费视频| 欧美极品videos大乳护士| 色偷偷9999www| 三级视频在线看| 欧美美女激情18p| 精品国产午夜福利| 亚洲女同一区二区| 国产一二三四五区| 国产suv精品一区二区883| 99视频在线免费| 在线观看一区| 伊人av成人| 美女久久久久| 国产精品我不卡| 一区二区三区| 国产精品igao视频| av老司机在线观看| 萌白酱国产一区二区| 国产小视频在线| 亚洲第一av网| 国产欧美久久久精品免费| 在线影院国内精品| 久草国产精品视频| 一区二区高清免费观看影视大全 | 国产剧情在线观看一区| 成人午夜电影在线播放| 国产精品亚洲d| 欧美性在线观看| 国产直播在线| 欧美激情2020午夜免费观看| 欧美日本高清| 一本久久综合亚洲鲁鲁| 外国精品视频在线观看| 日韩一区二区在线播放| 亚洲综合一区中| 欧美最猛性xxxxx直播| 国产微拍精品一区| 亚洲成在人线免费| 国产一级做a爰片在线看免费| 国产精品成人网| 亚洲一级理论片| 欧美国产欧美亚州国产日韩mv天天看完整 | 波多野结衣二区三区| 欧美日韩国产精品| 午夜影院在线看| 亚洲国产精品一区二区www在线| 强行糟蹋人妻hd中文| ...xxx性欧美| 国产激情无码一区二区三区| 国产精品久久久久久久久久久免费看| 成人黄色a级片| 亚洲国产成人一区二区三区| 亚洲久久久久久久| 国产精品女主播av| 美国一级黄色录像| 中文字幕在线播放不卡一区| 娇小11一12╳yⅹ╳毛片| 国产精品国产三级国产普通话蜜臀 | 亚洲在线视频播放| 欧美精品在线观看一区二区| 一区二区精品视频在线观看| 欧美日韩成人在线| 国产乱淫片视频| 日韩一区二区不卡| 日本激情视频网站| 亚洲精品久久久久中文字幕欢迎你 | 国产污视频在线看| 亚洲成av人片在www色猫咪| 天天操天天射天天爽| 偷偷要91色婷婷| 91video| 欧美日韩一区不卡| 国产黄色一级大片| 亚洲国产精品推荐| 国产中文字幕在线观看| www.日本久久久久com.| a在线免费观看| 91精品国产91久久久久| 亚洲综合在线电影| 91精品视频专区| 大奶在线精品| 日本高清一区| 中文字幕av亚洲精品一部二部| 被灌满精子的波多野结衣| 亚洲中午字幕| 一级做a免费视频| 成人晚上爱看视频| 国产精成人品免费观看| 亚洲啪啪综合av一区二区三区| 香蕉视频一区二区| 欧洲一区二区三区免费视频| 国产色视频在线| 日韩电影免费观看中文字幕| 在线观看免费版| 欧美精品国产精品日韩精品| 91天天综合| 成人三级在线| 日本午夜一区| 人妻少妇精品无码专区二区 | 国产精品久久久久久久午夜| 日韩在线观看中文字幕| 欧美一区二区视频17c| 亚洲最新色图| 中文字幕在线导航| 成人av在线资源网| 亚洲天堂网av在线| 欧美日韩性视频在线| 国产精品视频a| 亚洲欧美日韩网| 麻豆蜜桃在线| 成人国产精品一区| 精品国产91乱码一区二区三区四区| 久久综合亚洲精品| 蜜臀av性久久久久蜜臀aⅴ| yy6080午夜| 亚洲在线视频网站| 亚洲无码久久久久久久| 亚洲欧美日韩国产精品| jizz一区二区三区| 亚洲va久久久噜噜噜久久天堂| 不卡一区综合视频| av观看免费在线| 成人免费精品视频| 日韩va亚洲va欧美va清高| 欧美图区在线视频| 三级av在线| 97视频色精品| 91精品短视频| 国产又粗又长又爽视频| 免费看日韩精品| 国产人妻一区二区| 欧美日韩在线视频一区| 女人18毛片一区二区三区| 免费av一区二区| 小说区图片区亚洲| 亚洲精品一区二区三区蜜桃久| 性欧美xxxx大乳国产app| 午夜av免费看| 天天操天天色综合| 老司机午夜福利视频| 美女av一区二区三区| 亚洲国产综合在线观看| 四虎永久国产精品| 日本中文字幕一区| 欧美做受高潮6| 日本丶国产丶欧美色综合| 免费黄网站在线观看| 欧美在线观看视频| 亚洲国产精品嫩草影院久久av| 波多野结衣乳巨码无在线| av福利精品导航| 好看的av在线| 国产午夜一区二区| 91p九色成人| 亚洲v国产v| 久久精品av麻豆的观看方式| 国产小视频你懂的| 91精品国产色综合久久久蜜香臀| 精品视频在线一区二区| 91久久大香伊蕉在人线| 欧美日韩网站| 亚洲天堂美女视频| 精品国产91久久久久久| 日夜干在线视频| 国产精品热视频| 亚欧美无遮挡hd高清在线视频| 91视频福利网| 亚洲动漫第一页| 日本免费一区二区三区最新| 日本欧美爱爱爱| 日韩精品水蜜桃| 青青草精品在线| 精品久久久久久中文字幕一区奶水 | 亚洲欧美激情四射在线日| 日韩三区免费| 一区二区三区视频| 国产a区久久久| 欧美三级午夜理伦| 最好看的2019年中文视频 | 久久精品国产一区二区三| 国产精品嫩草影院俄罗斯| 亚洲第一二三四五区| 欧美黑人粗大| 黄色a级在线观看| 99在线精品视频| 中文字幕一区二区三区四区免费看| 大胆欧美人体视频| 大奶在线精品| 国产高潮免费视频| 亚洲影视资源网| 国产露出视频在线观看| 亚洲一区二区免费| 噜噜噜躁狠狠躁狠狠精品视频| 操她视频在线观看| 精品国产乱子伦一区| 主播大秀视频在线观看一区二区| 国产又黄又爽免费视频| 久久久综合九色合综国产精品| 一卡二卡三卡在线| 国产91对白在线播放| 99久久亚洲精品| 亚洲av无码一区二区二三区| 欧美精品三级在线观看| 国产精品伦理| 人人妻人人澡人人爽欧美一区| 国产视频一区二区在线观看| 国产影视一区二区| 欧美最猛性xxxx|