一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - 正則表達(dá)式 - 十分鐘上手正則表達(dá)式 上篇

十分鐘上手正則表達(dá)式 上篇

2021-11-17 15:22滌生手記 正則表達(dá)式

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等

十分鐘上手正則表達(dá)式 上篇

 

一、正則表達(dá)式的定義:

正則表達(dá)式是你所定義的 模式模板 ( pattern template ), Linux 工具可以用它來(lái)過(guò)濾文本。 Linux工具(比如sed 編輯器或 gawk 程序)能夠在處理數(shù)據(jù)時(shí)使用正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行模式匹配。如果數(shù)據(jù)匹配模式,它就會(huì)被接受并進(jìn)一步處理;如果數(shù)據(jù)不匹配模式,它就會(huì)被濾掉。

正則表達(dá)式模式匹配數(shù)據(jù):

十分鐘上手正則表達(dá)式 上篇

正則表達(dá)式模式利用通配符來(lái)描述數(shù)據(jù)流中的一個(gè)或多個(gè)字符。 Linux 中有很多場(chǎng)景都可以 使用通配符來(lái)描述不確定的數(shù)據(jù)。【*】號(hào)在我們工作中就比較常用。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

a.*參數(shù)會(huì)讓ls命令只列出名字以a開(kāi)頭的文件。文件名中a之后可以有任意多個(gè)字符(包括什么也沒(méi)有)。ls命令會(huì)讀取目錄中所有文件的信息,但只顯示跟通配符匹配的文件的信息。

 

二、正則表達(dá)式的類(lèi)型

使用正則表達(dá)式最大的問(wèn)題在于有不止一種類(lèi)型的正則表達(dá)式。 Linux 中的不同應(yīng)用程序可能會(huì)用不同類(lèi)型的正則表達(dá)式。這其中包括編程語(yǔ)言(Java 、 Perl 和 Python )、 Linux 實(shí)用工具(比 如sed 編輯器、 gawk 程序和 grep 工具)以及主流應(yīng)用(比如 MySQL 和 PostgreSQL 數(shù)據(jù)庫(kù)服務(wù)器)。正則表達(dá)式是通過(guò)正則表達(dá)式引擎( regular expression engine )實(shí)現(xiàn)的。正則表達(dá)式引擎是一套底層軟件,負(fù)責(zé)解釋正則表達(dá)式模式并使用這些模式進(jìn)行文本匹配。

兩種流行的正則表達(dá)式引擎:

  • POSIX基礎(chǔ)正則表達(dá)式(basic regular expression,BRE)引擎
  • POSIX擴(kuò)展正則表達(dá)式(extended regular expression,ERE)引擎

POSIX BRE引擎通常出現(xiàn)在依賴(lài)正則表達(dá)式進(jìn)行文本過(guò)濾的編程語(yǔ)言中。它為常見(jiàn)模式提供了高級(jí)模式符號(hào)和特殊符號(hào),比如匹配數(shù)字、單詞以及按字母排序的字符。awk程序用ERE引擎來(lái)處理它的正則表達(dá)式模式。

說(shuō)明:

由于實(shí)現(xiàn)正則表達(dá)式的方法太多,很難用一個(gè)簡(jiǎn)潔的描述來(lái)涵蓋所有可能的正則表達(dá)式。后面會(huì)結(jié)合sed和awk演示最常見(jiàn)的正則表達(dá)式。

 

三、定義 BRE 模式

最基本的 BRE模式是匹配數(shù)據(jù)流中的文本字符。下面會(huì)演示如何在正則表達(dá)式中定義文本以及會(huì)得到什么樣的結(jié)果。

 

3.1 純文本

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

模式定義了一個(gè)單詞 test 。 sed 編輯器和 gawk 程序腳本用它們各自的 print 命令打印出匹配該正則表達(dá)式模式的所有行。由于echo 語(yǔ)句在文本字符串中包含了單詞 test ,數(shù)據(jù)流文本能夠匹配所定義的正則表達(dá)式模式,編輯器能顯示該行。

正則表達(dá)式是區(qū)分大小寫(xiě)的:

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

第一次嘗試沒(méi)能匹配成功,因?yàn)?this 在字符串中并不都是小寫(xiě),而第二次嘗試在模式中使 用大寫(xiě)字母,所以能正常輸出。

在正則表達(dá)式中,你不用寫(xiě)出整個(gè)單詞。只要定義的文本出現(xiàn)在數(shù)據(jù)流中,正則表達(dá)式就能 夠匹配。

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

數(shù)據(jù)流中的文本是 books ,在數(shù)據(jù)中含有正則表達(dá)式 book ,因此正則表達(dá)式模式跟數(shù)據(jù)匹配。

在正則表達(dá)式中,空格和其他的字符并沒(méi)有什么區(qū)別。

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

空格的出現(xiàn)無(wú)法和文本內(nèi)容匹配。

如果在正則表達(dá)式中定義了空格,那么它必須出現(xiàn)在數(shù)據(jù)流中。甚至可以創(chuàng)建匹配多個(gè)連續(xù)空格的正則表達(dá)式模式。

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

單詞間有兩個(gè)空格的行匹配正則表達(dá)式模式。

 

3.2 特殊字符

正則表達(dá)式識(shí)別的特殊字符包括:

.*[]^${}+?|()

如果要用某個(gè)特殊字符作為文本字符,就必須 轉(zhuǎn)義 。在轉(zhuǎn)義特殊字符時(shí),你需要在它前面加一個(gè)特殊字符反斜杠()來(lái)告訴正則表達(dá)式引擎應(yīng)該將接下來(lái)的字符當(dāng)作普通的文本字符。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

查找文本中的美元符,只要在它前面加個(gè)反斜線(xiàn)。

 

3.3 錨字符

默認(rèn)情況下,當(dāng)指定一個(gè)正則表達(dá)式模式時(shí),只要模式出現(xiàn)在數(shù)據(jù)流中的任何地方,它就能匹配。有兩個(gè)特殊字符可以用來(lái)將模式鎖定在數(shù)據(jù)流中的行首或行尾。

 

3.3.1 鎖定在行首

脫字符( ^ )定義從數(shù)據(jù)流中文本行的行首開(kāi)始的模式。如果模式出現(xiàn)在行首之外的位置,正則表達(dá)式模式則無(wú)法匹配。 要用脫字符,就必須將它放在正則表達(dá)式中指定的模式前面。

十分鐘上手正則表達(dá)式 上篇

脫字符會(huì)在每個(gè)由換行符決定的新數(shù)據(jù)行的行首檢查模式。

十分鐘上手正則表達(dá)式 上篇

示例解說(shuō):

只要模式出現(xiàn)在新行的行首,脫字符就能夠發(fā)現(xiàn)它。

十分鐘上手正則表達(dá)式 上篇

演示說(shuō)明:

脫字符出現(xiàn)在正則表達(dá)式模式的尾部,sed編輯器會(huì)將它當(dāng)作普通字符來(lái)匹配。

注意:

如果指定正則表達(dá)式模式時(shí)只用了脫字符,就不需要用反斜線(xiàn)來(lái)轉(zhuǎn)義。但如果在模式中先指定了脫字符,隨后還有其他一些文本,那么必須在脫字符前用轉(zhuǎn)義字符。

 

3.3.2 鎖定在行尾

跟在行首查找模式相反的就是在行尾查找。特殊字符美元符( $ )定義了行尾錨點(diǎn)。將這個(gè)特殊字符放在文本模式之后來(lái)指明數(shù)據(jù)行必須以該文本模式結(jié)尾。

十分鐘上手正則表達(dá)式 上篇

 

3.3.3 組合錨點(diǎn)

在一些常見(jiàn)情況下,可以在同一行中將行首錨點(diǎn)和行尾錨點(diǎn)組合在一起使用。在第一種情況中,假定你要查找只含有特定文本模式的數(shù)據(jù)行。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

匹配文本中以test開(kāi)頭和以test結(jié)尾的行

將兩個(gè)錨點(diǎn)直接組合在一起,之間不加任何文本,這樣過(guò)濾出數(shù)據(jù)流中的空白行。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

定義的正則表達(dá)式模式會(huì)查找行首和行尾之間什么都沒(méi)有的那些行。由于空白行在兩個(gè)換行符之間沒(méi)有文本,剛好匹配了正則表達(dá)式模式。sed 編輯器用刪除命令 d 來(lái)刪除匹配該正則表達(dá)式模式的行,因此刪除了文本中的所有空白行。

 

3.4 點(diǎn)號(hào)字符

特殊字符點(diǎn)號(hào)用來(lái)匹配除換行符之外的任意單個(gè)字符。它必須匹配一個(gè)字符,如果在點(diǎn)號(hào)字符的位置沒(méi)有字符,那么模式就不成立。

十分鐘上手正則表達(dá)式 上篇

示例解說(shuō):

這個(gè)例子很具有說(shuō)明性的,為什么第一行無(wú)法匹配,而第二行和第三行就可以。第四行有點(diǎn)復(fù)雜。注意, 我們匹配了at,但在at前面并沒(méi)有任何字符來(lái)匹配點(diǎn)號(hào)字符。其實(shí)是有的!在正則表達(dá)式中, 空格也是字符,因此at前面的空格剛好匹配了該模式。第五行證明了這點(diǎn),將at放在行首就不 會(huì)匹配該模式了。

 

3.5 字符組

使用方括號(hào)來(lái)定義一個(gè)字符組。方括號(hào)中包含所有你希望出現(xiàn)在該字符組中的字符。然后可以在模式中使用整個(gè)組,就跟使用其他通配符一樣。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

匹配這個(gè)模式的單詞只有 cat 和 hat 。還要注意以 at 開(kāi)頭的行也沒(méi)有匹配。字符組中必須有個(gè)字符來(lái)匹配相應(yīng)的位置。

在不太確定某個(gè)字符的大小寫(xiě)時(shí),字符組會(huì)非常有用。如下示例:

十分鐘上手正則表達(dá)式 上篇

字符組不必只含有字母,也可以在其中使用數(shù)字。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

這個(gè)正則表達(dá)式模式匹配了任意含有數(shù)字 0 、 1 、 2 或 3 的行。含有其他數(shù)字以及不含有數(shù)字的 行都會(huì)被忽略掉。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

正則表達(dá)式模式可見(jiàn)于數(shù)據(jù)流中文本的任何位置。經(jīng)常有匹配模式的字符之外的其他字符。如果要確保只匹配五位數(shù),就必須將匹配的字符和其他字符分開(kāi),要么用空格,要么像這 個(gè)例子中這樣,指明它們就在行首和行尾。

 

3.6 排除型字符組

在正則表達(dá)式模式中,也可以反轉(zhuǎn)字符組的作用。可以尋找組中沒(méi)有的字符,而不是去尋找組中含有的字符。要這么做的話(huà),只要在字符組的開(kāi)頭加個(gè)脫字符。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

使用排除型字符組,正則表達(dá)式模式會(huì)匹配 c 或 h 之外的任何字符以及文本模式。由于空格字 符屬于這個(gè)范圍,它通過(guò)了模式匹配。但即使是排除,字符組仍然必須匹配一個(gè)字符,所以以 at開(kāi)頭的行仍然未能匹配模式。

 

3.7 區(qū)間

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

新的模式 [c-h]at 匹配了首字母在字母 c 和字母 h 之間的單詞。這種情況下,只含有單詞 at 的行將無(wú)法匹配該模式。

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

該字符組允許區(qū)間a~c、h~m中的字母出現(xiàn)在at文本前,但不允許出現(xiàn)d~g的字母。

 

3.8 特殊的字符組

除了定義自己的字符組外, BRE 還包含了一些特殊的字符組,可用來(lái)匹配特定類(lèi)型的字符。

  • [[:alpha:]] 匹配任意字母字符,不管是大寫(xiě)還是小寫(xiě)
  • [[:alnum:]] 匹配任意字母數(shù)字字符0~9、A~Z或a~z
  • [[:blank:]] 匹配空格或制表符
  • [[:digit:]] 匹配0~9之間的數(shù)字
  • [[:lower:]] 匹配小寫(xiě)字母字符a~z
  • [[:print:]] 匹配任意可打印字符
  • [[:punct:]] 匹配標(biāo)點(diǎn)符號(hào)
  • [[:space:]] 匹配任意空白字符:空格、制表符、NL、FF、VT和CR
  • [[:upper:]] 匹配任意大寫(xiě)字母字符A~Z

十分鐘上手正則表達(dá)式 上篇

示例說(shuō)明:

使用特殊字符組可以很方便地定義區(qū)間。可以用 [[:digit:]] 來(lái)代替區(qū)間 [0-9] 。

 

3.9 星號(hào)【*】

在字符后面放置星號(hào)表明該字符必須在匹配模式的文本中出現(xiàn) 0 次或多次。

十分鐘上手正則表達(dá)式 上篇

到此這篇關(guān)于十分鐘上手正則表達(dá)式 上篇的文章就介紹到這了,更多相關(guān)正則表達(dá)式 入門(mén)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_26442553/article/details/120671198

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产目拍亚洲精品一区二区三区 | 亚洲va精品中文字幕 | 美女和男人免费网站视频 | 91caoporm在线进入 | 日本手机在线视频 | 亚洲AV永久无码精品老司机蜜桃 | 日本高清免费不卡在线播放 | tubehdxx丝袜正片 | 免费观看大片毛片 | 亚洲国产成人精品 | 嫩草在线观看视频 | 日本韩国在线 | 色综合色狠狠天天综合色hd | 国产精品免费久久久久影院 | 国产欧美一区二区三区免费看 | 四虎永久在线精品国产馆v视影院 | 免费人成在线观看69式小视频 | 无遮挡免费h肉动漫在线观看 | a4yy欧美一区二区三区 | 国产香蕉国产精品偷在线观看 | 2019韩国最新三级 | 九九九精品视频 | 久九九精品免费视频 | 好奇害死猫在线观看 | 俄罗斯处女摘花 | 国内精品久久久久小说网 | 99精品国产高清一区二区三区香蕉 | 亚洲AVAV天堂AV在线网爱情 | 国产精品一区二区久久不卡 | 红色毛片 | 日本在线观看免费高清 | 成人精品一区久久久久 | 情人梁家辉在线 | 日本天堂视频在线观看 | 菠萝视频污 | 欧美三级小视频 | 午夜私人福利影院 | 4hu四虎永久网址 | 人体做爰aaaa免费 | 动漫美女人物被黄漫在线看 | 逼逼狗影院 |