日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]1.歷史:引用正則表達式萌芽于1940年代的神經(jīng)生理學(xué)研究,由著名數(shù)學(xué)家Stephen Kleene第一個正式描述。具體地說,Kleene歸納了前述的神經(jīng)生理學(xué)研究,在一篇題為《正則集代數(shù)》的論文中定

1.歷史:

引用
正則表達式萌芽于1940年代的神經(jīng)生理學(xué)研究,由著名數(shù)學(xué)家Stephen Kleene第一個正式描述。具體地說,Kleene歸納了前述的神經(jīng)生理學(xué)研究,在一篇題為《正則集代數(shù)》的論文中定義了“正則集”,并在其上定義了一個代數(shù)系統(tǒng),并且引入了一種記號系統(tǒng)來描述正則集,這種記號系統(tǒng)被他稱為“正則表達式”。在理論數(shù)學(xué)的圈子里被研究了幾十年之后,1968年,后來發(fā)明了UNIX系統(tǒng)的Ken Thompson第一個把正則表達式用于計算機領(lǐng)域,開發(fā)了qed和grep兩個實用文本處理工具,取得了巨大成功。在此后十幾年里,一大批一流計算機科學(xué)家和黑客對正則表達式進行了密集的研究和實踐。在1980年代早期,UNIX運動的兩個中心貝爾實驗室和加州大學(xué)伯克利分校分別圍繞grep工具對正則表達式引擎進行了研究和實現(xiàn)。與之同時,編譯器“龍書”的作者Alfred Aho開發(fā)了Egrep工具,大大擴展和增強了正則表達式的功能。此后,他又與《C程序設(shè)計語言》的作者Brian Kernighan等三人一起發(fā)明了流行的awk文本編輯語言。到了1986年,正則表達式迎來了一次飛躍。先是C語言頂級黑客Henry Spencer以源代碼形式發(fā)布了一個用C語言寫成的正則表達式程序庫(當(dāng)時還不叫open source),從而把正則表達式的奧妙帶入尋常百姓家,然后是技術(shù)怪杰Larry Wall橫空出世,發(fā)布了Perl語言的第一個版本。自那以后,Perl一直是正則表達式的旗手,可以說,今天正則表達式的標(biāo)準(zhǔn)和地位是由Perl塑造的。Perl 5.x發(fā)布以后,正則表達式進入了穩(wěn)定成熟期,其強大能力已經(jīng)征服了幾乎所有主流語言平臺,成為每個專業(yè)開發(fā)者都必須掌握的基本工具。



2.DFA和NFA

引用理解DFA和NFA
正則表達式引擎分成兩類,一類稱為DFA(確定性有窮自動機),另一類稱為NFA(非確定性有窮自動機)。兩類引擎要順利工作,都必須有一個正則式和一個文本串,一個捏在手里,一個吃下去。DFA捏著文本串去比較正則式,看到一個子正則式,就把可能的匹配串全標(biāo)注出來,然后再看正則式的下一個部分,根據(jù)新的匹配結(jié)果更新標(biāo)注。而NFA是捏著正則式去比文本,吃掉一個字符,就把它跟正則式比較,匹配就記下來:“某年某月某日在某處匹配上了!”,然后接著往下干。一旦不匹配,就把剛吃的這個字符吐出來,一個個的吐,直到回到上一次匹配的地方。
DFA與NFA機制上的不同帶來5個影響:
1. DFA對于文本串里的每一個字符只需掃描一次,比較快,但特性較少;NFA要翻來覆去吃字符、吐字符,速度慢,但是特性豐富,所以反而應(yīng)用廣泛,當(dāng)今主要的正則表達式引擎,如Perl、Ruby、Python的re模塊、Java和.NET的regex庫,都是NFA的。
2. 只有NFA才支持lazy和backreference等特性;
3. NFA急于邀功請賞,所以最左子正則式優(yōu)先匹配成功,因此偶爾會錯過最佳匹配結(jié)果;DFA則是“最長的左子正則式優(yōu)先匹配成功”。
4. NFA缺省采用greedy量詞(見item 4);
5. NFA可能會陷入遞歸調(diào)用的陷阱而表現(xiàn)得性能極差。

我這里舉一個例子來說明第3個影響。

例如用正則式/perl|perlman/來匹配文本 ‘perlman book’。如果是NFA,則以正則式為導(dǎo)向,手里捏著正則式,眼睛看著文本,一個字符一個字符的吃,吃完 ‘perl’ 以后,跟第一個子正則式/perl/已經(jīng)匹配上了,于是記錄在案,往下再看,吃進一個 ‘m’,這下糟了,跟子式/perl/不匹配了,于是把m吐出來,向上匯報說成功匹配 ‘perl’,不再關(guān)心其他,也不嘗試后面那個子正則式/perlman/,自然也就看不到那個更好的答案了。

如果是DFA,它是以文本為導(dǎo)向,手里捏著文本,眼睛看著正則式,一口一口的吃。吃到/p/,就在手里的 ‘p’ 上打一個鉤,記上一筆,說這個字符已經(jīng)匹配上了,然后往下吃。當(dāng)看到 /perl/ 之后,DFA不會停,會嘗試再吃一口。這時候,第一個子正則式已經(jīng)山窮水盡了,沒得吃了,于是就甩掉它,去吃第二個子正則式的/m/。這一吃好了,因為又匹配上了,于是接著往下吃。直到把正則式吃完,心滿意足往上報告說成功匹配了 ‘perlman’。

由此可知,要讓NFA正確工作,應(yīng)該使用 /perlman|perl/ 模式。

通過以上例子,可以理解為什么NFA是最左子式匹配,而DFA是最長左子式匹配。實際上,如果仔細分析,關(guān)于NFA和DFA的不同之處,都可以找出道理。而明白這些道理,對于有效應(yīng)用正則表達式是非常有意義的。


寫道正則表達式的形式定義故意非常精簡,避免定義多余的量詞 ? 和 +,它們可以被表達為: a+ = aa* 和 a? = (a|ε)。有時增加補算子 ~ ;~R 指示在 Σ* 上的不在 R 中的所有字符串的集合。補算子是多余的,因為它使用其他算子來表達(盡管計算這種表示的過程是復(fù)雜的,而結(jié)果可能指數(shù)性的增大)。
這種意義上的正則表達式可以表達正則語言,精確的是可被有限狀態(tài)自動機接受的語言類。但是在簡潔性上有重要區(qū)別。某類正則語言只能用大小指數(shù)增長的自動機來描述,而要求的正則表達式的長度只線性的增長。正則表達式對應(yīng)于喬姆斯基層級的類型-3文法。在另一方面,在正則表達式和不導(dǎo)致這種大小上的爆炸的非確定有限狀態(tài)自動機(NFA)之間有簡單的映射;為此 NFA 經(jīng)常被用作正則表達式的替代表示。
我們還要在這種形式化中研究表達力。如下面例子所展示的,不同的正則表達式可以表達同樣的語言: 這種形式化中存在著冗余。
有可能對兩個給定正則表達式寫一個算法來判定它們所描述的語言是否本質(zhì)上相等,簡約每個表達式到極小確定有限自動機,確定它們是否同構(gòu)(等價)。
這種冗余可以消減到什么程度? 我們可以找到仍有完全表達力的正則表達式的有趣的子集嗎? Kleene 星號和并集明顯是需要的,但是我們或許可以限制它們的使用。這提出了一個令人驚奇的困難問題。因為正則表達式如此簡單,沒有辦法在語法上把它重寫成某種規(guī)范形式。過去公理化的缺乏導(dǎo)致了星號高度問題。最近 Dexter Kozen 用克萊尼代數(shù)公理化了正則表達式。
很多現(xiàn)實世界的“正則表達式”引擎實現(xiàn)了不能用正則表達式代數(shù)表達的特征。

目前正則引擎支持的語言種類:


引擎類型程序DFAawk(大多數(shù)版本)、egrep(大多數(shù)版本)、flex、lex、MySQL、Procmail傳統(tǒng)型 NFAGNU Emacs、Java、grep(大多數(shù)版本)、less、more、.NET語言、PCRE library、Perl、PHP(所有三套正則庫)、Python、Ruby、set(大多數(shù)版本)、viPOSIX NFAmawk、Mortice Lern System's utilities、GUN Emacs(明確指定時使用)DFA/NFA混合GNU awk、 GNU grep/egrep、 Tcl?

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉