字符集和單詞
“.”用于匹配出換行符之外的任何一個字符。以下正則表達式可以匹配諸如Tomandy,~omandy,$omandy等字符串咳秉。
.omandy
“[]”用于指定一個字符集婉支,無論“[]”中有多少內(nèi)容,在使用時只匹配一個字符澜建。
[a-zA-Z] #匹配所有的字母
[a-z] #匹配所有的小寫字母
[abc] #匹配a或b或c
[0-9] #匹配0-9之間的數(shù)字
“單詞”指兩側(cè)由非單詞字符分割的字符串向挖◎蛞裕“非單詞字符”指字母、數(shù)字何之、下劃線以外的任何字符跟畅。匹配一個單詞可以使用“\< \>”,舉例如下:
位置及字符匹配
“^”溶推、“$”分別用于匹配行首和行尾徊件,以下表達式用于匹配t開頭,m結(jié)尾蒜危,t和m之間包含一個小寫字母的行虱痕。
^t[a-z]m$
\w 匹配字母或數(shù)字或下劃線或漢字 等價于 '[A-Za-z0-9]'。
\d 匹配數(shù)字辐赞。
\b 匹配單詞的開始或結(jié)束部翘。
tom(\w)?.dat #可匹配到tom.dat,toma.dat,tom1.dat等。
字符類
POSIX風(fēng)格的正則表達式提供了預(yù)定義的字符類用于匹配某些特定的字符响委,以下正則表達式列出所有以小寫字母開頭新思,m結(jié)束的行。[[:lower:]]等同于[a-z]赘风。
$egrep "^[[:lower:]]m$" words
常用的字符類如下所示夹囚。
字符類 | 描述 |
---|---|
[[:alnum:]] | 文字、數(shù)字字符 |
[[:alpha:]] | 字母字符 |
[[:lower:]] | 小寫字母 |
[[:upper:]] | 大寫字母 |
[[:digit:]] | 小數(shù) |
[[:xdigit:]] | 十六進制數(shù)字 |
[[:punct:]] | 標點符號 |
[[:blank:]] | 制表符和空格 |
[[:space:]] | 空格 |
[[:cntrl:]] | 所有控制符 |
[[:print:]] | 所有可打印字符 |
[[:graph:]] | 除空格外的所有可打印字符 |
轉(zhuǎn)義字符
“\”用來表示轉(zhuǎn)義字符贝次,比如“.”在正則表達式中用于匹配換行符之外的任何一個字符崔兴,可以使用“\.”來匹配“.”。
元字符
元字符 | 描述 |
---|---|
* | 重復(fù)0次或更多次 |
+ | 重復(fù)1次或更多次 |
? | 重復(fù)0次或1次 |
{n} | 重復(fù)n次 |
{n,} | 重復(fù)n次或更多次 |
{n,m} | 重復(fù)不少于n次蛔翅,不多余m次 |
(?:pattern) | 匹配 pattern但不獲取匹配結(jié)果敲茄,也就是說這是一個非獲取匹配,不進行存儲供以后使用山析。 |
(?=pattern) | 正向肯定預(yù)查堰燎,在任何匹配pattern的字符串開始處匹配查找字符串。該匹配不需要獲取供以后使用笋轨。例如秆剪,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"爵政。 |
(?!pattern) | 跟(?=pattern)相反仅讽,可以匹配到"Windows3.1"中的"Windows"。 |
(?<=pattern) | 反向肯定預(yù)查钾挟,與正向肯定預(yù)查類似洁灵,只是方向相反。例如掺出,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows"徽千,但不能匹配"3.1Windows"中的"Windows"苫费。 |
(?<!pattern) | 與(?<=pattern)相反。 |
\b | 匹配一個單詞邊界双抽,也就是指單詞和空格間的位置百框。例如'er\b'可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'牍汹。 |
\B | 匹配非單詞邊界铐维。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'柑贞。 |
舉例說明: 例子中#用于表示注釋
^t.*m$ #“.”匹配換行符外的所有字符方椎,".*"表示匹配的字符重復(fù)0次或多次,可匹配tm,tom,tadrm等钧嘶。
^t.+m$ #“.”匹配換行符外的所有字符棠众,".*"表示匹配的字符重復(fù)1次或多次,可匹配tom,tadrm等有决,注意不能匹配tm闸拿。
^t.?m$ #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)0次或1次书幕,可匹配tm,tom,tam等新荤。
^t.{2}m$ #“.”匹配換行符外的所有字符,".{2}"表示匹配的字符重復(fù)2次台汇,可匹配toom,toam,tabm等苛骨。
^t.{2,}m$ #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)2次或更多苟呐,可匹配tadm,toljsldjfm等痒芝。
^t.{2,4}m$ #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)不少于2次牵素,不多余4次严衬,可匹配toam,taadm,t1234m等。
在 *笆呆、+ 或 ? 限定符之后放置?请琳,該表達式從"貪心"表達式轉(zhuǎn)換為"非貪心"表達式或者最小匹配。以下例子所示:
文本: <H1>tomamdy 你是誰</H1>
<.*> #匹配到 “<H1>tomamdy 你是誰</H1> ”
<.*赠幕?> #匹配到 “<H1>” 和 “</H1> ”
<\w+?> #匹配到 “<H1>”
子表達式
子表達式也稱為分組俄精,看以下例子即可明白。
(tm){2,} #表示匹配tm重復(fù)2次或更多次的行榕堰。
tm{2,} #表示匹配m重復(fù)2次或更多次的行嘀倒。
反義
"^"可用于表示行首和反義,表示反義用法的例子如下:
[^t] #表示除t以外的任何字符。
[^abcde] #表示除abcde以外的任何字符测蘑。
^[^t] #表示匹配所有不以t開頭的行。
與 或操作
正則表達式對用戶提交的信息簡單地做“與”的操作康二,可以用“|”表示“或”操作碳胳。
^tm$ #所有以t開頭且以m結(jié)尾的行,只能匹配tm沫勿。
^t|m$ #所有以t開頭或以m結(jié)尾的行挨约,可以匹配twerd,adfdfm,tousdwerm等。
子表達式引用
在子表達式中捕獲的內(nèi)容可以在正則表達式的其他地方再次使用产雹〗氩眩可使用“\”加上編號1,2,3等來指定該子表達式匹配到的內(nèi)容,如以下示例:
(\<.*\>).?( )*\1
(\<.*\>)表示匹配任意長度的單詞蔓挖。第1個子表達式夕土。
.?表示匹配0個或1個標點符號".",此處注意"."前面匹配的是單詞瘟判,因此此處只能匹配標點符號怨绣。
( )*表示匹配0個或多個空格。第2個子表達式拷获。
由此分析篮撑,我們不難發(fā)現(xiàn)上述例子,返回的其實是第1個子表達式匹配到的內(nèi)容匆瓜。
非打印字符
字符 | 描述 |
---|---|
\f | 匹配一個換頁符 |
\n | 匹配一個換行符 |
\r | 匹配一個回車符 |
\s | 匹配任何空白字符赢笨,空格、制表符驮吱、換頁符等 |
\S | 匹配任何非空白字符 |
\t | 匹配一個制表符 |
\v | 匹配一個垂直制表符 |
運算符優(yōu)先級順序
運算符 | 描述 |
---|---|
\ | 轉(zhuǎn)義符 |
(), (?:), (?=), [] | 括號 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符,任何字符 | 定位符等 |
| | 或 |
表格從上往下標注了運算符的優(yōu)先級從高到低茧妒。