定義
用來定義搜索模式的一系列字符
A regular expression, regex or regexp (sometimes called a rational expression) is, in theoretical computer science and formal language theory, a sequence of characters that define a search pattern. Usually this pattern is then used by string searching algorithms for "find" or "find and replace" operations on strings.
----來自維基百科
常見的樣子
#perl
/H.+W.+!/si
#python
matchObj = re.search( r'H.+W.+!', str, re.S|re.I )
好用的參考網(wǎng)站
https://regex101.com/
四種用途
在一個字符串里尋找一個子串(一個符合正則表達式定義的子串)鸥印。引申而來的用途有如下四種:
匹配绸贡、捕獲檩电、替換沪悲、分割
六個必要的概念
注意:以下的符號的表述方式采用 perl 里的語法疫向,但盡可能的會保證各種語言都一致
元字符
與字面意思不同的字符刊驴,是正則表達式語法的基石
匹配符
匹配一個字符(character)
除了元字符中的 . 和 [ ] 以外喧笔,常見匹配符有:
符號
含義
\n
換行
\s
[ \f\n\r\t]
\S
\s的補集
\d
[0-9]
\D
\d的補集
\w
[a-zA-Z0-9_]
\W
\w的補集
這些匹配符都可以放在 [ ] 里面畜疾,例如:[\s\S] 表示匹配任意一個字符
分組
分組與捕獲
符號
含義
( )
用于分組,并且能用于捕獲小括弧內(nèi)匹配到的子串
(?: )
用于分組劫恒,但不捕獲里面匹配到的子串
常見的用法有兩種:
1贩幻、與 | 一起使用轿腺。例如:a(b|c)d 可以匹配字符串 abd 或 acd
2、與量詞連用丛楚。例如:a(bc)+d 可以匹配字符串 abcbcd
量詞
量詞族壳、貪婪與非貪婪
量詞:跟在匹配符或分組之后,表示匹配符或分組重復(fù)出現(xiàn)若干次
貪婪:盡可能匹配更長的內(nèi)容
非貪婪:盡可能匹配更短的內(nèi)容
默認的是貪婪模式趣些;非貪婪模式需要在量詞后加?
符號
含義
貪婪 or 非貪婪
*
出現(xiàn)了0次或多次
貪婪
+
出現(xiàn)了1次或多次
貪婪
?
出現(xiàn)了0次或1次
貪婪
{n}
出現(xiàn)了n次
貪婪
{n, }
出現(xiàn)了至少n次
貪婪
{n, m}
出現(xiàn)了至少n次仿荆,并且不超過m次
貪婪
*?
出現(xiàn)了0次或多次
非貪婪
+?
出現(xiàn)了1次或多次
非貪婪
??
出現(xiàn)了0次或1次
非貪婪
{n}?
出現(xiàn)了n次
非貪婪
{n, }?
出現(xiàn)了至少n次
非貪婪
{n, m}?
出現(xiàn)了至少n次,并且不超過m次
非貪婪
貪婪與非貪婪的區(qū)別主要體現(xiàn)在捕獲與替換中坏平。
例如:對于字符串 niconiconi 拢操,表達式 (n.*o) 捕獲到的是 niconico,而表達式 (n.*?o) 捕獲的是 nico
定位
匹配兩個字符之間的位置(boundary)
符號
含義
^
匹配字符串的開始舶替。如果存在修飾符m令境,那么它可以匹配行首
$
匹配字符串的結(jié)尾。如果存在修飾符m顾瞪,那么它可以匹配行尾
\b
Match a \w\W or \W\w boundary
\B
Match except at a \w\W or \W\w boundary
\A
Match only at beginning of string
\Z
Match only at end of string, or before newline at the end
\z
Match only at end of string
修飾符
一定程度上改變正則表達式的匹配邏輯舔庶,它一般出現(xiàn)在正則表達式之外。
符號
含義
i
使正則表達式里出現(xiàn)的英文字母可以匹配其大寫和小寫
m
使正則表達式里的 ^ 和 $ 可以匹配行首和行尾
s
使正則表達式里的 . 可以匹配 \n
x
使正則表達式里的空格不匹配任何內(nèi)容陈醒,這樣惕橙,可以使用空格來調(diào)整表達式的格式,使之更容易閱讀钉跷。如果需要匹配空格弥鹦,可以在空格前面加轉(zhuǎn)義符
g
全局匹配,用于捕獲和替換爷辙,只在 perl 中有效
進階
優(yōu)先級
符號 -- 優(yōu)先級從高到低
[ ]
量詞
( )
|
匿名捕獲與命名捕獲
1. 匿名捕獲彬坏,捕獲到的內(nèi)容放在數(shù)組里
2. 命名捕獲,捕獲到的內(nèi)容放在Map里
復(fù)雜定位 (零寬斷言)
符號
含義
(?=pattern)
匹配一個位置膝晾,它后面匹配pattern
(?!pattern)
匹配一個位置苍鲜,它后面不匹配pattern
(?<=pattern)
匹配一個位置,它前面匹配pattern玷犹。注意:這個pattern的長度必須是確定的
(?<!pattern)
匹配一個位置混滔,它前面不匹配pattern。注意:這個pattern的長度必須是確定的
最后編輯于 :2017.12.11 07:31:27
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者