正則表達(dá)式有兩種風(fēng)格:posix和perl風(fēng)格舷夺,最常用是posix風(fēng)格的苦酱。下面記錄的均是posix風(fēng)格
字符集和類
- 通配符,可以匹配除換行符(
\\n
)之外的任意一個(gè)字符
.at
给猾,可以匹配"cat","sat","mat"等疫萤,一般這種通配符用于匹配操作系統(tǒng)中的文件名
- 限定范圍
- 如果要限定匹配的范圍,可以使用
[a-z]at
形式敢伸,任何包括在方括號(hào)中的內(nèi)容都是一個(gè)字符類-匹配字符所屬的字符集合- 可以列出一個(gè)集合扯饶,
[aeiou]
,來匹配所有元音字母- 也可以描述一個(gè)范圍池颈,正如前面的連字符尾序,也是一個(gè)范圍集:
[a-zA-Z]
,這個(gè)集合代表任何的大小字母- 也可以指明不屬于某個(gè)集合躯砰,
[^a-z]
每币,用來匹配不在小寫字母中的字符
重復(fù)
如果希望某個(gè)字符串或者字符類不止一次出現(xiàn),可以使用2個(gè)特殊字符代替:*
和+
琢歇,這兩個(gè)符號(hào)放在表示式后面
-
*
表示這個(gè)模式可以重復(fù)0次或多次 -
+
表示這個(gè)模式可以重復(fù)1次或更多次
c+at
兰怠,表示可以匹配"cat","ccat","cccat",但是無法匹配"at"
c*at
李茫,表示可以匹配"cat","ccat","cccat"揭保,也可以匹配"at"
子表達(dá)式
通常,將一個(gè)表達(dá)式分為幾個(gè)子表達(dá)式非常有用涌矢,使用圓括號(hào)來實(shí)現(xiàn)。
(very )*large
快骗,可以匹配:"large","very large","very very large"
子表達(dá)式計(jì)數(shù)
可以在花括號(hào){}
中的數(shù)字表達(dá)式來指定內(nèi)容允許重復(fù)出現(xiàn)的次數(shù)娜庇。可以指定一個(gè)確切的數(shù)字方篮,也可以是一個(gè)重復(fù)次數(shù)范圍名秀,或是一個(gè)開區(qū)間的重復(fù)范圍
(very){1, 2}
,可以匹配"very","veryvery"
(very){3}
藕溅,可以匹配"veryveryvery"
(very)(1,)
匕得,可以匹配"very","veryvery","veryveryvery"...
定位到字符串的開始或末尾
脫字符號(hào)^
用于正則表達(dá)式的開始,表示子字符串必須出現(xiàn)被搜索字符串的開始處
字符$
,用于正則表達(dá)式的末尾汁掠,表示子字符串必須出現(xiàn)在字符串的末尾
^bob
略吨,用于在字符串開始處匹配bob
com$
,用于在字符串末尾處匹配com
^[a-z]$
,這個(gè)將只能匹配a-z之間的字符組成的字符串
分支
可以使用正則表達(dá)式中一條豎線考阱,來表示一個(gè)選擇
com|edu|net
翠忠,來匹配"com","net","edu"中任意一個(gè)
匹配特殊字符
如果要匹配那些特殊字符,需要使用轉(zhuǎn)義形式乞榨,在要匹配的字符前面加一個(gè)反斜杠\\
特殊字符主要有:
- \: 轉(zhuǎn)義字符
-
^
: 在字符串開始匹配 -
$
: 在字符串末尾匹配 -
.
: 匹配除換行符之外的字符(字符串末尾僅代表.
) -
|
: 選擇分支的開始 -
(
: 子模式開始 -
)
: 子模式結(jié)束 -
*
: 重復(fù)0次或多次 -
+
: 重復(fù)1次或多次 -
{
: 最谢嘀/最大量記號(hào)開始 -
}
: 最小/最大量記號(hào)結(jié)束 -
?
: 標(biāo)記一個(gè)子模式為可選
\\吃既,表示匹配反斜杠\
\\$
考榨,表示匹配$