正則表達(dá)式 – 簡(jiǎn)介

2022-08-01 14:52 更新

除非您以前使用過(guò)正則表達(dá)式,否則您可能不熟悉此術(shù)語(yǔ)。但是,毫無(wú)疑問(wèn),您已經(jīng)使用過(guò)不涉及腳本的某些正則表達(dá)式概念。

例如,您很可能使用 ? 和 * 通配符來(lái)查找硬盤上的文件。? 通配符匹配文件名中的單個(gè)字符,而 * 通配符匹配零個(gè)或多個(gè)字符。像 data?.dat 這樣的模式將查找下列文件:

data1.dat
data2.dat
datax.dat
dataN.dat

使用 * 字符代替 ? 字符擴(kuò)大了找到的文件的數(shù)量。data*.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

盡管這種搜索方法很有用,但它還是有限的。通過(guò)理解 * 通配符的工作原理,引入了正則表達(dá)式所依賴的概念,但正則表達(dá)式功能更強(qiáng)大,而且更加靈活。

正則表達(dá)式的使用,可以通過(guò)簡(jiǎn)單的辦法來(lái)實(shí)現(xiàn)強(qiáng)大的功能。下面先給出一個(gè)簡(jiǎn)單的示例:

 ^.+@.+\\..+$ 

繼續(xù)閱讀本教程將讓您也可以自由應(yīng)用這樣的代碼。

為什么使用正則表達(dá)式?

典型的搜索和替換操作要求您提供與預(yù)期的搜索結(jié)果匹配的確切文本。雖然這種技術(shù)對(duì)于對(duì)靜態(tài)文本執(zhí)行簡(jiǎn)單搜索和替換任務(wù)可能已經(jīng)足夠了,但它缺乏靈活性,若采用這種方法搜索動(dòng)態(tài)文本,即使不是不可能,至少也會(huì)變得很困難。

通過(guò)使用正則表達(dá)式,可以:

  • 測(cè)試字符串內(nèi)的模式。
    例如,可以測(cè)試輸入字符串,以查看字符串內(nèi)是否出現(xiàn)電話號(hào)碼模式或信用卡號(hào)碼模式。這稱為數(shù)據(jù)驗(yàn)證。
  • 替換文本。
    可以使用正則表達(dá)式來(lái)識(shí)別文檔中的特定文本,完全刪除該文本或者用其他文本替換它。
  • 基于模式匹配從字符串中提取子字符串。
    可以查找文檔內(nèi)或輸入域內(nèi)特定的文本。

例如,您可能需要搜索整個(gè)網(wǎng)站,刪除過(guò)時(shí)的材料,以及替換某些 HTML 格式標(biāo)記。在這種情況下,可以使用正則表達(dá)式來(lái)確定在每個(gè)文件中是否出現(xiàn)該材料或該 HTML 格式標(biāo)記。此過(guò)程將受影響的文件列表縮小到包含需要?jiǎng)h除或更改的材料的那些文件。然后可以使用正則表達(dá)式來(lái)刪除過(guò)時(shí)的材料。最后,可以使用正則表達(dá)式來(lái)搜索和替換標(biāo)記。

發(fā)展歷史

正則表達(dá)式的"祖先"可以一直上溯至對(duì)人類神經(jīng)系統(tǒng)如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經(jīng)生理學(xué)家研究出一種數(shù)學(xué)方式來(lái)描述這些神經(jīng)網(wǎng)絡(luò)。

1956 年, 一位叫 Stephen Kleene 的數(shù)學(xué)家在 McCulloch 和 Pitts 早期工作的基礎(chǔ)上,發(fā)表了一篇標(biāo)題為"神經(jīng)網(wǎng)事件的表示法"的論文,引入了正則表達(dá)式的概念。正則表達(dá)式就是用來(lái)描述他稱為"正則集的代數(shù)"的表達(dá)式,因此采用"正則表達(dá)式"這個(gè)術(shù)語(yǔ)。

隨后,發(fā)現(xiàn)可以將這一工作應(yīng)用于使用 Ken Thompson 的計(jì)算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要發(fā)明人。正則表達(dá)式的第一個(gè)實(shí)用應(yīng)用程序就是 Unix 中的 qed 編輯器。

如他們所說(shuō),剩下的就是眾所周知的歷史了。從那時(shí)起直至現(xiàn)在正則表達(dá)式都是基于文本的編輯器和搜索工具中的一個(gè)重要部分。

應(yīng)用領(lǐng)域

目前,正則表達(dá)式已經(jīng)在很多軟件中得到廣泛的應(yīng)用,包括 *nix(Linux, Unix等)、HP 等操作系統(tǒng),PHP、C#、Java 等開發(fā)環(huán)境,以及很多的應(yīng)用軟件中,都可以看到正則表達(dá)式的影子。

C# 正則表達(dá)式

在我們的 C# 教程中,C# 正則表達(dá)式 這一章節(jié)專門介紹了有關(guān) C# 正則表達(dá)式的知識(shí)。

Java 正則表達(dá)式

在我們的 Java 教程中,Java 正則表達(dá)式 這一章節(jié)專門介紹了有關(guān) Java 正則表達(dá)式的知識(shí)。

JavaScript 正則表達(dá)式

在我們的 JavaScript 教程中,JavaScript RegExp 對(duì)象 這一章節(jié)專門介紹了有關(guān) JavaScript 正則表達(dá)式的知識(shí),同時(shí)我們還提供了完整的 JavaScript RegExp 對(duì)象參考手冊(cè)。

Python 正則表達(dá)式

在我們的 Python 基礎(chǔ)教程中,Python 正則表達(dá)式 這一章節(jié)專門介紹了有關(guān) Python 正則表達(dá)式的知識(shí)。

Ruby 正則表達(dá)式

在我們的 Ruby 教程中,Ruby 正則表達(dá)式 這一章節(jié)專門介紹了有關(guān) Ruby 正則表達(dá)式的知識(shí)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)