BloggerAds

2011年5月19日 星期四

規則運算式(正規表示式)語法整理

以下為參考 Wiki 後,修改成自已比較能了解的規則運算式符號整理:

以下資料仍有一些不太了解或不知道該如何解釋的地方,請見諒。
編號字元描述
1\特殊字元的前置符號,將下一個字元標記為一個特殊字元。例如,「\n」代表換行符號。「\\」代表「\」而「\(」則代表「(」。
2^表示字串必須以後面的字元開頭。ex. ^aa,表示必須以aa開頭。
3$表示字串必須以後面的字元結尾。ex. aa$,表示必須以aa結尾。
4*表示 * 前面的字元可出現或不出現。例如:Gooo*gle 能匹配 Google、Goooooogle。* 等於 {0,}。
5+表示 + 前面的字元至少要出現一次(可出現多次),ex.go+gle 表示這個字串可以為gogle、google、gooooogle...。+ 等於 {1,}
6?表示 ? 前面的字元最多只可以出現一次(可不出現)。ex.colou?r 表示這個字串可以為color或colour。? 等於 {0,1}
7{n}大括號「{}」中包起來的數字n是一個非負整數。代表前面的字元一定要出現n次。例如:o{3} 可以為 Gooogle 的 ooo,但不能匹配 Google。
8{n,}大括號「{}」中包起來的數字n是一個非負整數。代表前面的字元至少要出現n次。ex.go{2,}gle 可以為google、goooogle,但gogle就不合格。
9{n,m}大括號「{}」中包起來的數字n是一個非負整數。代表前面的字元至少要出現n次,最多不可超過m次。n要小於等於m。ex. go{2,4}gle可以為google、goooogle,但gogle、gooooogle就不合格。
10?當?字元放在次數限制符號(*,+,?,{n},{n,},{n,m})後時,表示要不貪心的尋找,可增加效能。不貪心表示只要找到一個就好,不再找別的。
參考:http://deer.nublog.cc/article.php?i=20080225
11.表示除「\n」之外的任何字元。要表示包括「\n」在內的任何字元,請使用「[.\n]」。
12(pattern)小括號代表中間的pattern為一群組。
13(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行儲存供以後使用。例如:run(?:n|ning) 能匹配 running 整個字串,並且從此字串後繼續比對。
13(?=pattern)正向預查,在任何匹配pattern的字串開始處匹配尋找字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如:Office(?=2003|2007|2010) 能匹配 Office2003 中的 Office,但不能匹配 Office2005 中的 Office,而從 Office 字串後繼續比對。
14(?!pattern)負向預查,在任何不匹配pattern的字串開始處匹配尋找字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如:Office(?!2003|2007|2010) 能匹配 Office2005 中的 Office,但不能匹配 Office2010 中的 Office,而從 Office 字串後繼續比對。
15x|y代表OR,ex. (A|a)pple 表示 這個字串可以為Apple或apple
16[xyz]代表可為中括號[]內的任一字元。ex.[abc]表示可為a、b、c任一字元。
17[^xyz]代表不可為中括號[]內的任一字元。ex.[abc]表示不可為a、b、c任一字元。
18[a-z]代表可為中括號[]內的字元區間內的任一字元。ex.[a-z]表示可為a~z間的任一字元。
19[^a-z]代表不可為中括號[]內的字元區間內的任一字元。ex.[a-z]表示不可為a~z間的任一字元。
20\b表示字和空白之間的交會點。ex.於aa bb aabb時,可以用 aa\b 找出 aa,而不會找出aabb、也不會找出「aa (空格)」。
21\B表示非字和空白之間的交會點
22\cx表示一個控制字元。例如,\cM匹配一個Control-M或Enter符。x的值必須為A-Z或a-z之一。否則會將c視為一個單純的「c」字元。
23\d可為任何數字。\d 等於[0-9]。
24\D不可為數字。\D 等於[^0-9]。
25\f換頁符號。\f 等於\x0c和\cL。
26\n換行符號。\n 等於\x0a和\cJ。
27\rEnter符號。\r 等於\x0d和\cM。
28\s代表任何空白字元,包括空格、製表符、換頁符等等。\s 等於[\f\n\r\t\v]。
29\S代表任何非空白字元。\S 等於[^\f\n\r\t\v]。
30\t代表Tab字元。\t 等於\x09和\cI。
31\v代表垂直Tab字元(Vertical Tab)。\v 等於\x0b和\cK。
32\w可為包括底線「_」的任何文字、數字。\w 等於「[A-Za-z0-9_]」。
33\W不可為包括底線「_」的任何文字、數字。。\W 等於「[^A-Za-z0-9_]」。
34\xn表示為n所代表的ASCII字元,n為十六進位值。十六進位值僅可寫兩個字元。例如,「\x41」匹配「A」。「\x041」則等價於「\x04&1」。
35\numnum是一個正整數。對前方括號內的字元做重複的動作。例如,「(.)\1」代表兩個連續的相同字元。
36\n標識一個八進制轉義值或一個向後參照。如果\n之前至少n個獲取的子運算式,則n為向後參照。否則,如果n為八進制數位(0-7),則n為一個八進制轉義值。
37\nm標識一個八進制轉義值或一個向後參照。如果\nm之前至少有nm個獲得子運算式,則nm為向後參照。如果\nm之前至少有n個獲取,則n為一個後跟文字m的向後參照。如果前面的條件都不滿足,若n和m均為八進制數位(0-7),則\nm將匹配八進制轉義值nm。
38\nml如果n為八進位數字(0-3),且m和l均為八進位數字(0-7),則代表八進位數字所代表的值。
39\unn是一個用四個十六進位數字表示的Unicode字元。代表n所表達的字元。例如,\u00A9代表版權符號(©)。
40\onn是一個用二個八進位數字表示的Unicode字元。代表n所表達的字元。例如,\o47。
參考資料:
http://deer.nublog.cc/article.php?i=20080225
http://ericbbs.blogspot.com/2009/08/2.html

沒有留言:

張貼留言