正則表達式

正則表達式是一種基礎的模式匹配技術,是一個強大的字符串處理工具。使用合適的正則表達式,可以對文本執行過濾、剝離(strip)、替換、搜索等操作。

正則表達式

正則表達式的工作原理

正則表達式由複雜的狀態機解析,嘗試在目標文本中找到最佳匹配。文本可以是管道的輸出、文件,甚至是在命令行中輸入的字符串。正則表達式的實現方法不止一種,其實現引擎通常會選擇最長的匹配。

位置標記

位置標記錨點是標識字符串位置的正則表達式,默認情況下,正則表達式所匹配的字符可以出現在字符串中任何位置。

正則表達式 描述 示例
^ 指定了匹配正則表達式的文本必須起始於字符串的首部 ^tux能夠匹配以tux起始的行
$ 指定了匹配正則表達式的文本必須結束於目標字符串的尾部 tux$能夠匹配以tux結尾的行

標識符

標識符是正則表達式的基礎組成部分。它定義了那些爲了匹配正則表達式,必須存在(或不存在)的字符。

正則表達式 描述 示例
A字符 正則表達式必須匹配該字符 A能夠匹配字符A
. 匹配任意一個字符 .只能匹配單個字符
[ ] 匹配中括號內的任意一個字符,中括號內可以是一個字符組或字符範圍 coo[kl]能夠匹配cook或cool,[0-9]匹配任意單個數字
[^] 匹配不在括號中的任意一個字符,中括號內可以是一個字符組或字符範圍 9[ ^01]能夠匹配92和93,但是不能匹配91和90;A[ ^0-9]匹配A以及隨後除數字外的任意單個字符

數量修飾符

一個標識符可以出現一次、多次或是不出現。數量修飾符定義了模式可以出現的次數

正則表達式 描述 示例
匹配之前的項1次或0次 colou?r能夠匹配color或colour,但不能匹配colouur
+ 匹配之前的項1次或多次 Rollno-9+能夠匹配Rollno-99或Rollno-9,但不能匹配Rollno-
* 匹配之前的項0次或多次 co*l能夠匹配col、cl、cool、coool
{n} 匹配在之前的項n次 [0-9]{3}能夠匹配任意的三位數,[0-9]{3}可以擴展爲[0-9][0-9][0-9]
{n,} 之前的項至少匹配n次 [0-9]{2,}能夠匹配任意一個兩位或更多位的數字
{n,m} 之前的項所必須匹配的最小次數和最大次數 [0-9]{2,5}能夠匹配兩位數到五位數中的任意一個數字

其他

還有一些其他的特殊字符可以調整正則表達式的匹配方式

正則表達式 描述 示例
( ) 將括號中的內容視爲一個整體 ma(tri)?x能夠匹配max或matrix
| 指定了一種選擇結構,可以匹配|兩邊的任意一項 oct (1st|2nd)能夠匹配oct 1st 或 oct 2nd
\ 轉義字符可以轉義之前介紹的特殊字符 a\.b能夠匹配a.b,但不能匹配ajb,因爲ie\忽略了.的特殊意義

實例

一、能夠匹配任意單詞的正則表達式
( +[a-zA-Z]+ +)
在這裏插入圖片描述
開頭的+表示需要匹配一個或多個空格,[a-zA-Z]表示匹配所有的大小寫字母,隨後的+表示至少要匹配一個字母,多者不限,最後的+表示需要匹配一個或多個空格來終結單詞。
這個正則表達式無法匹配句子末尾的單詞。要想匹配句尾或是逗號之前的單詞,需要將正則表達式改寫爲:
( +[a-zA-Z]+[?,.]? +)
[?,.]?表示僅需要匹配問好、逗號、句號中的一個
在這裏插入圖片描述
二、匹配郵箱地址
[a-Z0-9_]+@[a-z0-9]+.[a-z]+.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章