国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 正則表達式 - 十分鐘上手正則表達式 上篇

十分鐘上手正則表達式 上篇

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

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

十分鐘上手正則表達式 上篇

 

一、正則表達式的定義:

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

正則表達式模式匹配數據:

十分鐘上手正則表達式 上篇

正則表達式模式利用通配符來描述數據流中的一個或多個字符。 Linux 中有很多場景都可以 使用通配符來描述不確定的數據。【*】號在我們工作中就比較常用。

十分鐘上手正則表達式 上篇

示例說明:

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

 

二、正則表達式的類型

使用正則表達式最大的問題在于有不止一種類型的正則表達式。 Linux 中的不同應用程序可能會用不同類型的正則表達式。這其中包括編程語言(Java 、 Perl 和 Python )、 Linux 實用工具(比 如sed 編輯器、 gawk 程序和 grep 工具)以及主流應用(比如 MySQL 和 PostgreSQL 數據庫服務器)。正則表達式是通過正則表達式引擎( regular expression engine )實現的。正則表達式引擎是一套底層軟件,負責解釋正則表達式模式并使用這些模式進行文本匹配。

兩種流行的正則表達式引擎:

  • POSIX基礎正則表達式(basic regular expression,BRE)引擎
  • POSIX擴展正則表達式(extended regular expression,ERE)引擎

POSIX BRE引擎通常出現在依賴正則表達式進行文本過濾的編程語言中。它為常見模式提供了高級模式符號和特殊符號,比如匹配數字、單詞以及按字母排序的字符。awk程序用ERE引擎來處理它的正則表達式模式。

說明:

由于實現正則表達式的方法太多,很難用一個簡潔的描述來涵蓋所有可能的正則表達式。后面會結合sed和awk演示最常見的正則表達式。

 

三、定義 BRE 模式

最基本的 BRE模式是匹配數據流中的文本字符。下面會演示如何在正則表達式中定義文本以及會得到什么樣的結果。

 

3.1 純文本

十分鐘上手正則表達式 上篇

演示說明:

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

正則表達式是區分大小寫的:

十分鐘上手正則表達式 上篇

演示說明:

第一次嘗試沒能匹配成功,因為 this 在字符串中并不都是小寫,而第二次嘗試在模式中使 用大寫字母,所以能正常輸出。

在正則表達式中,你不用寫出整個單詞。只要定義的文本出現在數據流中,正則表達式就能 夠匹配。

十分鐘上手正則表達式 上篇

演示說明:

數據流中的文本是 books ,在數據中含有正則表達式 book ,因此正則表達式模式跟數據匹配。

在正則表達式中,空格和其他的字符并沒有什么區別。

十分鐘上手正則表達式 上篇

演示說明:

空格的出現無法和文本內容匹配。

如果在正則表達式中定義了空格,那么它必須出現在數據流中。甚至可以創建匹配多個連續空格的正則表達式模式。

十分鐘上手正則表達式 上篇

演示說明:

單詞間有兩個空格的行匹配正則表達式模式。

 

3.2 特殊字符

正則表達式識別的特殊字符包括:

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

如果要用某個特殊字符作為文本字符,就必須 轉義 。在轉義特殊字符時,你需要在它前面加一個特殊字符反斜杠()來告訴正則表達式引擎應該將接下來的字符當作普通的文本字符。

十分鐘上手正則表達式 上篇

示例說明:

查找文本中的美元符,只要在它前面加個反斜線。

 

3.3 錨字符

默認情況下,當指定一個正則表達式模式時,只要模式出現在數據流中的任何地方,它就能匹配。有兩個特殊字符可以用來將模式鎖定在數據流中的行首或行尾。

 

3.3.1 鎖定在行首

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

十分鐘上手正則表達式 上篇

脫字符會在每個由換行符決定的新數據行的行首檢查模式。

十分鐘上手正則表達式 上篇

示例解說:

只要模式出現在新行的行首,脫字符就能夠發現它。

十分鐘上手正則表達式 上篇

演示說明:

脫字符出現在正則表達式模式的尾部,sed編輯器會將它當作普通字符來匹配。

注意:

如果指定正則表達式模式時只用了脫字符,就不需要用反斜線來轉義。但如果在模式中先指定了脫字符,隨后還有其他一些文本,那么必須在脫字符前用轉義字符。

 

3.3.2 鎖定在行尾

跟在行首查找模式相反的就是在行尾查找。特殊字符美元符( $ )定義了行尾錨點。將這個特殊字符放在文本模式之后來指明數據行必須以該文本模式結尾。

十分鐘上手正則表達式 上篇

 

3.3.3 組合錨點

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

十分鐘上手正則表達式 上篇

示例說明:

匹配文本中以test開頭和以test結尾的行

將兩個錨點直接組合在一起,之間不加任何文本,這樣過濾出數據流中的空白行。

十分鐘上手正則表達式 上篇

示例說明:

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

 

3.4 點號字符

特殊字符點號用來匹配除換行符之外的任意單個字符。它必須匹配一個字符,如果在點號字符的位置沒有字符,那么模式就不成立。

十分鐘上手正則表達式 上篇

示例解說:

這個例子很具有說明性的,為什么第一行無法匹配,而第二行和第三行就可以。第四行有點復雜。注意, 我們匹配了at,但在at前面并沒有任何字符來匹配點號字符。其實是有的!在正則表達式中, 空格也是字符,因此at前面的空格剛好匹配了該模式。第五行證明了這點,將at放在行首就不 會匹配該模式了。

 

3.5 字符組

使用方括號來定義一個字符組。方括號中包含所有你希望出現在該字符組中的字符。然后可以在模式中使用整個組,就跟使用其他通配符一樣。

十分鐘上手正則表達式 上篇

示例說明:

匹配這個模式的單詞只有 cat 和 hat 。還要注意以 at 開頭的行也沒有匹配。字符組中必須有個字符來匹配相應的位置。

在不太確定某個字符的大小寫時,字符組會非常有用。如下示例:

十分鐘上手正則表達式 上篇

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

十分鐘上手正則表達式 上篇

示例說明:

這個正則表達式模式匹配了任意含有數字 0 、 1 、 2 或 3 的行。含有其他數字以及不含有數字的 行都會被忽略掉。

十分鐘上手正則表達式 上篇

示例說明:

正則表達式模式可見于數據流中文本的任何位置。經常有匹配模式的字符之外的其他字符。如果要確保只匹配五位數,就必須將匹配的字符和其他字符分開,要么用空格,要么像這 個例子中這樣,指明它們就在行首和行尾。

 

3.6 排除型字符組

在正則表達式模式中,也可以反轉字符組的作用。可以尋找組中沒有的字符,而不是去尋找組中含有的字符。要這么做的話,只要在字符組的開頭加個脫字符。

十分鐘上手正則表達式 上篇

示例說明:

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

 

3.7 區間

十分鐘上手正則表達式 上篇

示例說明:

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

十分鐘上手正則表達式 上篇

示例說明:

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

 

3.8 特殊的字符組

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

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

十分鐘上手正則表達式 上篇

示例說明:

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

 

3.9 星號【*】

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

十分鐘上手正則表達式 上篇

到此這篇關于十分鐘上手正則表達式 上篇的文章就介紹到這了,更多相關正則表達式 入門內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩电影在线免费观看 | 天堂av一区二区 | 制服诱惑一区二区 | 久久综合久久综合久久 | 亚洲不卡在线 | 欧美在线免费视频 | 亚洲精品无 | 日韩国产在线观看 | 精品国产一级毛片 | 久久影院免费观看 | 亚洲 欧美 精品 | 免费国产视频 | 91黄视频 | 亚洲精品在线观看网站 | 久久久久久久国产视频 | 96成人爽a毛片一区二区 | 国产欧美日韩 | 亚洲精品国产综合区久久久久久久 | 日韩精品无码一区二区三区 | 亚洲视频自拍 | 国产成人99久久亚洲综合精品 | 福利网在线 | 午夜不卡视频 | 国产综合亚洲精品一区二 | 99久色 | 一级黄色毛片 | 日韩欧美一区二区中文字幕 | 毛片黄片| 一区二区三区亚洲 | 国产成人在线播放 | a级毛片免费高清视频 | 亚洲精品久久久久久一区二区 | 久久福利电影 | 综合在线视频 | 99在线视频播放 | 亚洲国产成人精品女人久久久 | 亚洲视频一区二区三区 | 成人精品一区二区 | 日韩电影一区二区在线观看 | 色吧一区| 久久综合久久综合久久综合 |