天天看點

正規表達式必知必會-1

 純文字比對

Hello, my name is Ben. Please visit my website at http://www.forta.com.
正規表達式必知必會-1

這裡使用了普通文本正規表達式,他将比對的原始文本裡的Ben,再看一個例子:my, 它在原始文本裡面找到了兩個比對結果。

正規表達式必知必會-1

比對任意字元 

.字元(英文句号)可以比對任意單字元,有些特殊的符号如換行符是無法比對的。

正規表達式必知必會-1
正規表達式必知必會-1

上述例子中,因為.能夠比對任意單個字元,是以excel.也比對該檔案。

.允許一次使用多個,它可以連續使用,也可以在任意位置出現。

比對特殊字元

我們使用/來對特殊字的轉義,表示後面所跟随的符号是正規表達式裡有有特殊含義的。

檢視以nx,ex開始的xml檔案名

正規表達式必知必會-1

比對多個字元中的某一個

請比對nx和ex開頭的xml檔案,我們可以使用元字元[和]來定義一個字元集合。在使用[和] 定義的字元集和裡,出現在[和] 之間的所有字元都是該集合的組成部分,必須比對其中某個成員(但并非全部)

正規表達式必知必會-1
正規表達式必知必會-1

這種字元集合一般用于不區分大小寫的搜尋如:

[Rr]eg[Ee]x
           

The phrase "regular expression" is often abbreviated as RegEx or regex.

正規表達式必知必會-1

利用字元集合區間

如果要比對na和sa開始的以數字結尾的xls檔案如下圖

正規表達式必知必會-1

如果要抛開sam.xls,需要用數字集合來解決,如下圖

[ns]a[0123456789]\.xls
           

na1.xls

na2.xls

sa1.xls

ca1.xls

sam.xls

正規表達式必知必會-1

連字元

上述例子中用到了集合[0123456789]表示比對數字,為了台灣字元區間的定義,正規表達式提供了一個特殊的元字元-(連字元)來定義字元區間,它隻出現在[和]之間的時候才是元字元,可以将上述的案例改寫成

[ns]a[0-9]\.xls
           

na1.xls

na2.xls

sa1.xls

ca1.xls

sam.xls

正規表達式必知必會-1

字元區間并不僅限于數字,一下這些都是合法的字元區間。

A-Z,比對從A到Z的所有大寫字母

a-z,比對從a到z的是以小寫字母

A-F,比對從A到F的所有大寫字母

A-z,比對ASCII字元A到ASCII字元z的所有字元

在同一個字元集裡可以出現多個字元區間。比如說[A-Za-z0-9]:比對所有大小寫字母和數字

排除

我們通常用元字元:^來排除某個字元集合,如下面例子,我們需要拿ns開始的,沒有數字的文章

[ns]a[^0-9]\.xls
           
正規表達式必知必會-1

注意:^的效果将作用于給定字元集合裡面的所有字元或字元區間,而不是僅限于緊跟在^字元後面的哪一個字元或字元區間。

轉義

var myArray = new Array();
...
if(myArray[0] == 0){
...
}
           

比對myArray[0]

正規表達式必知必會-1
正規表達式必知必會-1
正規表達式必知必會-1

比對空白字元

[\b]        回退(并删除)一個字元(Backspace鍵)

\f           換頁符

\n          換行符

\r           回車符

\t           制表符(Tab鍵)

\v          垂直制表符

"101","Ben","Forta"
"102","Jim","James"


"103","AAA","DDD"
"104","BBB","CCC"
           
正規表達式必知必會-1

比對特定的字元類型

比對數字

\d        任何一個數字字元(等價于[0-9])

\D        任何一個非數字字元(等價于[^0-9])

比對字母數字

\w        任何一個字母數字字元(大小寫均可)或下劃線字元(等價于[a-zA-Z0-9_])

\W        任何一個非字母數字或非下劃線字元(等價于[^a-zA-Z0-9_])

比對空白字元

\s        任何一個空白字元(等價于[\f\n\r\t\v])

\S        任何一個非空白字元(等價于[^\f\n\r\t\v])

比對十六進制

\x0A(對于ASCII字元10,也就是換行符)等價于\n

比對八進制

\011(對于ASCII字元9,也就是制表符)等價于\t

比對POSIX字元類(JS不支援)

[:alnum:]        任何一個字母或數字(等價于[a-zA-Z0-9])

[:alpha:]         任何一個字母(等價于[a-zA-Z])

[:blank:]         空格或制表符(等價于\t )

[:cntrl:]           ASCII控制字元(ASKII 0到31,再加上ASCII127)

[:digit:]           任何一個數字(等價于[0-9])

[:graph:]        和[:print:]一樣,但不包括空格

[:lower:]         任何一個小寫字母(等價于[a-z])

[:print:]           任何一個可列印字元

[:punct:]         即不屬于[:alnum:]  ,也不屬于[:cntrl:]的任何一個字元

[:space:]        任何一個空白字元,包括空格(等價于[\f\n\r\t\v ])

[:upper:]         任何一個大寫字母(等價于[A-Z])

[:xdigit:]          任何一個十六進制數字(等價于[a-fA-F0-9])

使用POSIX字元類,需要以[[開始,以]]結束(兩對方括号),如:[[:digit:] ]

繼續閱讀