正則表達式


閱讀(740.2k) 收藏 (249)

手冊簡(jiǎn)介

正則表達式是對字符串操作的一種邏輯公式。

手冊說(shuō)明

1477554985799213


正則表達式,又稱(chēng)規則表達式,是一種文本模式,通常用來(lái)檢索、替換和控制文本。主要包括a 到 z 的字母以及一些特殊的元字符。

正則表達式的應用范圍非常之廣泛,最初是由Unix普及開(kāi)來(lái)的,后來(lái)在廣泛運用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。

學(xué)習正則表達式,實(shí)際上是在學(xué)習一種十分靈活的邏輯思維,聯(lián)系通過(guò)簡(jiǎn)單快速的方法達到對于字符串的控制。也許跟如此多的程序語(yǔ)言?huà)煦^看起來(lái)有些生澀難懂,但是它也能夠很輕松地在Microsoft Word上實(shí)現。

本書(shū)從簡(jiǎn)單的文本匹配開(kāi)始,循序漸進(jìn)地介紹了很多復雜內容,其中包括回溯引用、條件性求值和前后查找,等等。通過(guò)簡(jiǎn)單的描述和精彩的實(shí)例幫助讀者系統全面地掌握正則表達式,并運用它們去解決實(shí)際問(wèn)題。諸位必須知道正則表達式是程序員手中一把威力無(wú)比強大的武器,學(xué)會(huì )它,可以用來(lái)處理大部分的程序語(yǔ)言。

無(wú)論你在使用何種語(yǔ)言,都可以備一本《正則表達式》隨時(shí)查閱。

學(xué)完本教程,進(jìn)行實(shí)戰練習,才算真正掌握哦:點(diǎn)擊開(kāi)始實(shí)戰

正則表達式的起源

正則表達式的“鼻祖”或許可一直追溯到科學(xué)家對人類(lèi)神經(jīng)系統工作原理的早期研究。美國新澤西州的Warren McCulloch和出生在美國底特律的Walter Pitts這兩位神經(jīng)生理方面的科學(xué)家,研究出了一種用數學(xué)方式來(lái)描述神經(jīng)網(wǎng)絡(luò )的新方法,他們創(chuàng )造性地將神經(jīng)系統中的神經(jīng)元描述成了小而簡(jiǎn)單的自動(dòng)控制元,從而作出了一項偉大的工作革新。

在1956 年,一位名叫Stephen Kleene的數學(xué)科學(xué)家發(fā)表了一篇題目是《神經(jīng)網(wǎng)事件的表示法》的論文,利用稱(chēng)之為正則集合的數學(xué)符號來(lái)描述此模型,引入了正則表達式的概念。正則表達式被作為用來(lái)描述其稱(chēng)之為“正則集的代數”的一種表達式,因而采用了“正則表達式”這個(gè)術(shù)語(yǔ)。

之后一段時(shí)間,人們發(fā)現可以將這一工作成果應用于其他方面。Ken Thompson就把這一成果應用于計算搜索算法的一些早期研究,Ken Thompson是 Unix的主要發(fā)明人,也就是大名鼎鼎的Unix之父。Unix之父將此符號系統引入編輯器QED,然后是Unix上的編輯器ed,并最終引入grep。Jeffrey Friedl 在其著(zhù)作當中對此作了進(jìn)一步闡述講解。

然后,正則表達式在各種計算機語(yǔ)言或各種應用領(lǐng)域得到了廣大的應用和發(fā)展,并且不斷演變成如今更加方便使用的形式。


正則表達式引擎

正則表達式的引擎主要分為兩大類(lèi):一種是DFA,一種是NFA,后來(lái)又出現了兩者的合并類(lèi)

POSIX NFA。DFA引擎在線(xiàn)性時(shí)狀態(tài)下執行,可以確保匹配最長(cháng)的可能的字符串。但是,因為 DFA 引擎只包含有限的狀態(tài),所以它不能匹配具有反向引用的模式;并且因為它不構造顯示擴展,所以它不可以捕獲子表達式。NFA引擎以 特定擴展以獲得成功的匹配,所以它可以捕獲子表達式匹配和匹配的反向引用,但是執行速度可能因此被拖慢。

POSIX NFA 引擎與傳統的 NFA 引擎類(lèi)似,不同點(diǎn)在于除非已經(jīng)找到了可能的最長(cháng)的匹配,否則它將一直回溯。因此,POSIX NFA 引擎的速度慢于傳統的 NFA 引擎。

NFA以表達式為主導,DFA以文本為主導。一般而論,DFA引擎則搜索更快一些,但是NFA以表達式為主導,反而更容易操縱,因此一般程序員更偏愛(ài)NFA引擎。兩種引擎各有所長(cháng),在實(shí)戰的時(shí)候請根據自己的需要選擇適合的正則表達式引擎。


除了本書(shū)你還可以看


w3cschool編程獅微信公眾號


在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號