您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關正則表達式的詳細介紹,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
正則表達式,又稱規(guī)則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本。
許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟件(例如sed和grep)普及開的。正則表達式通??s寫成“regex”,單數有regexp、regex,復數有regexps、regexes、regexen。
元字符使用正則表達式具有處理能力。元字符既可以是放在[ ]
中的任意單個字符(如 [a]
表示匹配單個小寫字符 a
),也可以是字符序列(如 [a-d]
表示匹配 a 、b、 c、 d
之間的任意一個字符,而 \w
表示任意英文字母和數字及下劃線),常見的元字符如下:
字符 | 描述 | 特別說明 |
---|---|---|
. | 匹配除換行符(\n )以外的任意字符 | ~ |
[abcde] | 匹配 a b c d e 之中的任意一個字符 | 所有字符是 或 的關系 |
[a-h] | 匹配 a 到h 之間的任意一個字符 | ~ |
[^fgh] | 不與 fgh 之中的任意一個字符匹配 | 在 中括號[ ] 的第一個字符前加上 ^ 表示 取反 不匹配中括號里面出現(xiàn)的任意字符 |
\w | 匹配大小寫英文字符及數字 0 到 9 之間的任意一個及下劃線,相當于[a-zA-Z0-9_] | ~ |
\W | 與 \w 相反,相當于 [^a-zA-Z0-9_] | ~ |
\s | 匹配任意的空白符,相當于 [\f\n\r\t\v] | ~ |
\S | 與 \s 相反,相當于 [^\s] | ~ |
\d | 匹配任何 0 到 9 之間的單個數字,相當于 [0-9] | ~ |
\D | 與 \d 相反,相當于[^0-9] | ~ |
[\u4e00-\u9fa5] | 匹配任意單個漢字(中文)(這里用的是 Unicode 編碼表示的漢字) | ~ |
\b | 匹配單詞的開始或結束 | ~ |
^ | 匹配字符串的開始 | 放在中括號的第一個字符前 則變?yōu)?取反的意思 |
$ | 匹配字符串的結束 | ~ |
作用:限定這個符號前面 一個 單元 多出現(xiàn)的次數
單元:
上面的元字符都是針對單個字符匹配的,要想同時匹配多個字符的話,還需要借助限定符,下面是一些常見的限定符(下表中 n
和 m 都是表示 整數。)
字符 | 描述 | 特別說明 |
---|---|---|
* | 匹配 0 到 多 個元字符,相當于 {0,} | ~ |
? | 匹配 0 到 1 個元字符, 相當于 {0,1} | ~ |
+ | 匹配至少 1 個元字符,相當于 {1,} | ~ |
{n} | 匹配 n 個元字符 | ~ |
{n,} | 匹配至少 n 個元字符 | ~ |
{n,m} | 匹配 n 到 m 個元字符 | ~ |
\b | 匹配單詞邊界 | ~ |
^ | 字符串必須以指定的字符開始 | ~ |
$ | 字符串必須以指定的字符結束 | ~ |
分組
,比如 ^(13)[4-9]\d{8}$
表示任意以 13 開頭的移動手機號碼。abcabcabc+
表示 最后的字母 c
出現(xiàn) 1 次或 多次;(abcabcabc)+
表示 整個字符串 abcabcabc
出現(xiàn) 1 次或 多次。|
來表示 或
的關系,例如 z|j|q
表示匹配 z 、j、q
之中的任意一個字母。其實等價于 [zjq]
。ab|cd|ef
表示的是:要么是 ab
、要么是 cd
要么是 ef
。a(b|cd|e)f
表示的是:以a
開頭,要么是 b
、要么是 cd
要么是 e
,最后以f
結尾。|
(或
) 的唯一邊界是 小括號(( )
)[0-9A-Z.?]
這個正則你如何理解?.
和 ?
出現(xiàn)在中括號中時,.
和 ?
將變?yōu)?普通字符,它就是 點 和 問號。你可以理解為 [ ]
的優(yōu)先級要大于. 和 ?
的優(yōu)先級。?aaa.bbb
,記住這里 . 和 ?
被完全當做了普通字符。多選結構其實就是元字符 |
(或)的使用。
界定范圍:開頭、結尾、小括號
正則 | 含義 |
---|---|
Windows98|Windows2000|WindowsXP | 匹配Windows98 或者Windows2000 或者WindowsXP |
^Windows98|Windows2000|WindowsXP$ | 以Windows98 開頭或者包含Windows2000 或者以WindowsXP結尾 注意 ^ 和$ 都包含在| 的范圍內,因為| 的界限只有:開頭、結尾、小括號 |
Windows(98|2000|XP) | Windows 然后98 或者2000 或者XP |
總結:多選結構可以包括很多字符,但不能超越 括號
的界限。
(\d{1,3}\.){3}\d{1,3}
簡單的 IP 地址匹配表達式((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
左括號
為標志,從左向右,第一個分組的組號為 1 ,第二個為 2 ,依次類推。示例:
\b(\w+)\b\s+\1\b
可以用來匹配重復的單詞where where go, tom tom happy
直白解釋:
正則表達式中,前面用小括號進行劃分(分組),后面把小括號匹配到的內容引用到后面來,分別用\1
、\2
等 來表示。(第一個小括號極\1
...)。如果存在 小括號嵌套小括號的情況 (\w+(.?))
記住:這個時候要以 (
為標志 從左往右 數小括號就可以了。
\b
、^
、$
那樣。環(huán)視不會占用字符。(?=exp)
位置的后面能匹配 exp
。例如:(?=\d)
當前位置右邊是數字。(?!exp)
位置的后面不能匹配 exp
。例如:(?!\d)
當前位置右邊不是數字。(?<=exp)
位置的前面能匹配 exp
。例如:(?<=\d)
當前位置左邊是數字(?<!exp)
位置的前面不能匹配 exp
。例如:(?!\d)
當前位置左邊不是數字。+
、*
、{3,12}
等)時, 通常的行為是匹配盡可能多的字符。a.*b
,它將會匹配最長的以 a
開始,以 b
結束的字符串。如果用它來搜索 aabab
的話,它會匹配整個字符串 aabab
,這被稱為 -------貪婪匹配?
。這樣 .*?
就意味著匹配任意數量的重復,但是在能使整個 匹配成功的前提下使用最少的重復。a.*?b
匹配最短的,以 a
開始, 以 b
結束的字符串。如果把它應用于 aabab
的話,它會匹配 aab
和 ab
。總結:
貪婪與懶惰模式之間的區(qū)別就在于:懶惰模式 在量詞
*
的后面多了一個 問號?
。
在使用正則表達式時,需要注意匹配的順序。通常相同優(yōu)先級 從左到右 進行計算,不同優(yōu)先級的運算 先高后低。各種操作符的匹配順序優(yōu)先級 從高到低 如下表所示。
順序 | 元字符 | 描述 |
---|---|---|
1 | \ | 轉義字符 |
2 | () 、(?:) 、(?=) 、[] | 模式單元和原子表 |
3 | * 、+ 、? 、{n} 、{n,} 、{n,m} | 重復匹配 |
4 | ^ 、$ 、\b 、\B 、\A 、\Z | 邊界限制 |
5 | | | 模式選擇 |
1問:要匹配字符串 333333\$33\33333
中的 \$
正則應該怎么寫?
2問:如果在 PHP 中 preg_match
函數分別用單引號和雙引號的表達式來匹配上面的 \$
,怎么寫?
答案:
\\\$
'/\\\\\\$/'
。(為方便查看我們拆分一下為 '/\\ \\ \\ $/'
)"/\\\\\\\$/"
。(為方便查看我們拆分一下為 "/\\ \\ \\ \$/"
)再答:
\
,所以我們需要 6個\
來生成表達式。雙引號除了轉義 \
以外,還需要多一個 \
用來轉義 $
所以它 需要 7 個\
。
以上就是正則表達式的詳細介紹,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。