正則指引, 2/e

餘晟

買這商品的人也買了...

商品描述

本書綜合作者自己遇到的實際問題,以及其他開發人員咨詢的問題,總結出一套巧妙運用正則表達式的辦法,並通過具體的例子指導讀者拆解、分析問題。全書分為三部分:第一部分主要講解正則表達式的基礎知識,涵蓋了正則表達式中常見的各種功能和結構;第二部分主要講解關於正則表達式的更深入的知識,詳細探討了編碼問題、匹配原理、解題思路;第三部分將之前介紹的各種知識落實到常用語言.NET、Java、JavaScript、PHP、Python、Ruby、Objective-C、Golang中,在詳細介紹了在這些語言中正則表達式的具體用法之外,還辨析了版本之間的細微差異。本書既可以作為專門的學慣用書,也可以作為備查的參考手冊。

目錄大綱

第一部分 
第1章 字元組 .................2 
1.1 普通字元組 ............. 2 
1.2 關於Python的基礎知識........................... 4 
1.3 普通字元組(續) . 6 
1.4 元字元與轉義 ......... 8 
1.5 排除型字元組 ....... 10 
1.6 字元組簡記法 ....... 12 
1.7 字元組運算 ........... 14 
1.8 POSIX字元組 ...... 15 
第2章 量詞 ...................17 
2.1 一般形式 ............... 17 
2.2 常用量詞 ............... 19 
2.3 資料提取 ............... 21 
2.4 點號....................... 23 
2.5 濫用點號的問題 ... 23 
2.6 忽略優先量詞 ....... 26 
2.7 轉義....................... 31 
第3章 括弧 ...................33 
3.1 分組....................... 33 
3.2 多選結構 ............... 39 
3.3 引用分組 ............... 44 
3.3.1 反向引用... 48 
3.3.2 各種引用的記法 .......................... 50 
3.3.3 命名分組... 53 
3.4 非捕獲分組 ........... 55 
3.5 補充....................... 56 
3.5.1 轉義 .......... 56 
3.5.2 URL Rewrite ................................ 56 
3.5.3 一個例子... 58 
第4章 斷言 ...................60 
4.1 單詞邊界 ............... 60 
4.2 行起始/結束位置 .. 62 
4.3 環視....................... 69 
4.4 補充....................... 75 
4.4.1 環視的價值 .................................. 75 
4.4.2 環視與分組編號 .......................... 76 
4.4.3 環視的支持程度 .......................... 77 
4.4.4 環視的組合 .................................. 79 
4.4.5 斷言和反向引用之間的關係 ...... 81 
4.4.6 逆序環視的詭異之處 .................. 81 
第5章 匹配模式 ............83 
5.1 不區分大小寫模式與模式的指定方式 .. 83 
5.2 單行模式 ............... 86 
5.3 多行模式 ............... 87 
5.4 注釋模式 ............... 89 
5.5 補充....................... 91 
5.5.1 更多的模式 .................................. 91 
5.5.2 修飾符的作用範圍 ...................... 91 
5.5.3 失效修飾符 .................................. 92 
5.5.4 模式與反向引用 .......................... 93 
5.5.5 衝突策略... 93 
5.5.6 哪種方式更好 .............................. 94 
第6章 其他 ...................95 
6.1 轉義....................... 95 
6.1.1 字串轉義與正則轉義 .............. 95 
6.1.2 元字元的轉義 .............................. 99 
6.1.3 徹底消除元字元的特殊含義 .... 101
6.1.4 字元組中的轉義 ........................ 103 
6.2 正則運算式的處理形式 ........................ 103 
6.2.1 函數式處理 ................................ 104 
6.2.2 面向物件式處理 ........................ 104 
6.2.3 比較 ........ 105 
6.2.4 線程安全性 ................................ 106 
6.3 運算式中的優先順序 ................................ 108 
6.4 回車和換行 ......... 109 

第二部分 
第7章 Unicode ...........112 
7.1 基礎知識 ............. 112 
7.2 關於編碼 ............. 115 
7.3 儘量使用Unicode編碼 ........................ 116 
7.4 Unicode與字元組簡記法 ..................... 120 
7.5 規範化問題 ......... 122 
7.6 單詞邊界 ............. 123 
7.7 碼值轉義序列 ..... 125 
7.8 Unicode屬性 ...... 127 
7.8.1 Unicode Property ....................... 128 
7.8.2 Unicode Block ........................... 128 
7.8.3 Unicode Script ........................... 129 
7.9 Unicode屬性列表 ................................. 130 
7.9.1 Unicode Property ....................... 130 
7.9.2 Unicode Block ........................... 131 
7.9.3 Unicode Script ........................... 135 
7.10 POSIX字元組 .. 135 
7.11 Emoji ................. 136 
第8章 匹配原理 ..........138 
8.1 有窮自動機 ......... 138 
8.2 正則運算式的匹配過程 ........................ 139 
8.3 回溯..................... 142 
8.4 NFA和DFA ....... 144
 第9章 常見問題的解決思路 ...........................146 
9.1 關於元素的三種邏輯 ............................ 146 
9.1.1 必須出現. 147 
9.1.2 可能出現. 147 
9.1.3 不能出現. 148 
9.2 正則運算式的常見操作 ........................ 150 
9.2.1 提取 ........ 150 
9.2.2 驗證 ........ 156 
9.2.3 替換 ........ 160 
9.2.4 切分 ........ 165 
9.3 正則運算式的優化建議 ........................ 167 
9.3.1 使用緩存. 167 
9.3.2 儘量準確地表達意圖 ................ 168 
9.3.3 避免重複匹配 ............................ 168 
9.3.4 獨立出文本和錨點 .................... 169 
9.4 別過分依賴正則運算式 ........................ 170 
9.4.1 徹底放棄字串操作 ................ 170 
9.4.2 思維定式. 171 
9.4.3 正則運算式可以匹配各種文本 172 
9.4.4 濫用正則運算式 ........................ 173 

第三部分 
第10章 .NET ..............176 
10.1 預備知識 ........... 176 
10.2 正則功能詳解 ... 177 
10.2.1 列表 .... 177 
10.2.2 字元組 178 
10.2.3 Unicode屬性 ......................... 178 
10.2.4 字元組簡記法........................ 179 
10.2.5 單詞邊界 ............................... 179 
10.2.6 行起始/結束位置 .................. 180 
10.2.7 環視 .... 181 
10.2.8 匹配模式 ............................... 181 
10.2.9 捕獲分組的引用 .................... 182 
10.3 正則API簡介 .. 183 
10.3.1 Regex .. 183 
10.3.2 Match .. 187 
10.4 常用操作示例 ... 188 
10.4.1 驗證 .... 188 
10.4.2 提取 .... 189 
10.4.3 替換 .... 189 
10.4.4 切分 .... 190 
第11章 Java ..............191 
11.1 預備知識 ........... 191 
11.2 正則功能詳解 ... 192 
11.2.1 列表 .... 192 
11.2.2 字元組. 192 
11.2.3 Unicode屬性 ......................... 194 
11.2.4 字元組簡記法 ........................ 194 
11.2.5 單詞邊界 ................................ 194 
11.2.6 行起始/結束位置 ................... 195 
11.2.7 環視 .... 196 
11.2.8 匹配模式 ................................ 196 
11.2.9 純文本模式 ............................ 197 
11.2.10 捕獲分組的引用 .................. 197 
11.3 正則API簡介 .. 197 
11.3.1 Pattern . 198 
11.3.2 Matcher .................................. 200 
11.3.3 String ... 203 
11.4 常用操作示例 ... 204 
11.4.1 驗證 .... 204 
11.4.2 提取 .... 204 
11.4.3 替換 .... 205 
11.4.4 切分 .... 206 
11.5 Java 8和Java 9的新改進 ................... 206 
11.5.1 Java 8的新改進 ..................... 206 
11.5.2 Java 9的新改進 ..................... 207 
第12章 JavaScript .....208 
12.1 預備知識 ........... 208 
12.2 正則功能詳解 ... 209 
12.2.1 列表 .... 209 
12.2.2 字元組 210 
12.2.3 字元組簡記法........................ 211 
12.2.4 單詞邊界 ............................... 211 
12.2.5 行起始/結束位置 .................. 212 
12.2.6 環視 .... 212 
12.2.7 匹配模式 ............................... 213 
12.2.8 捕獲分組的引用 .................... 214 
12.3 正則API簡介 .. 215 
12.3.1 RegExp 215 
12.3.2 String ... 218 
12.4 常用操作示例 ... 221 
12.4.1 驗證 .... 221 
12.4.2 提取 .... 222 
12.4.3 替換 .... 223 
12.4.4 切分 .... 223 
12.5 關於ActionScript ................................ 223 
12.5.1 RegExp 223 
12.5.2 匹配規則 ............................... 224 
12.5.3 匹配模式 ............................... 224 
12.5.4 正則API ................................ 224 
第13章 PHP ...............225 
13.1 預備知識 ........... 225 
13.2 正則功能詳解 ... 227 
13.2.1 列表 .... 227 
13.2.2 字元組 228 
13.2.3 Unicode屬性 ......................... 229 
13.2.4 字元組簡記法........................ 229 
13.2.5 單詞邊界 ............................... 230 
13.2.6 行起始/結束位置 .................. 230 
13.2.7 環視 .... 231 
13.2.8 匹配模式 ............................... 231
13.2.9 純文本模式 ........................... 232 
13.2.10 捕獲分組的引用 .................. 232 
13.3 正則API簡介 .. 233 
13.3.1 PREG 常量說明 ................... 233 
13.3.2 preg_quote ............................. 235 
13.3.3 preg_ grep .............................. 235 
13.3.4 preg_match ............................. 236 
13.3.5 preg_match_all ....................... 237 
13.3.6 preg_last_error ....................... 239 
13.3.7 preg_replace ........................... 239 
13.3.8 preg_replace_callback ............ 240 
13.3.9 preg_filter ............................... 240 
13.3.10 preg_split ............................. 241 
13.3.11 preg_replace_callback_array 242 
13.4 常見的正則操作舉例 .......................... 243 
13.4.1 驗證 .... 243 
13.4.2 提取 .... 243 
13.4.3 替換 .... 244 
13.4.4 切分 .... 244 
第14章 Python ...........245 
14.1 預備知識 ........... 245 
14.2 正則功能詳解 ... 246 
14.2.1 列表 .... 246 
14.2.2 字元組 247 
14.2.3 Unicode屬性 ......................... 248 
14.2.4 字元組簡記法........................ 249 
14.2.5 單詞邊界 ............................... 250 
14.2.6 行起始/結束位置 .................. 251 
14.2.7 環視 .... 252 
14.2.8 匹配模式 ............................... 252 
14.2.9 捕獲分組的引用 .................... 253 
14.2.10 條件匹配 ............................. 253 
14.3 正則API簡介 .. 254 
14.3.1 RegexObject ........................... 254 
14.3.2 re.compile(regex[, flags]) ....... 255 
14.3.3 re.search(pattern, string[, flags]) ............................... 256 
14.3.4 MatchObject ........................... 256 
14.3.5 re.match(pattern, string[, flags]) ................................ 257 
14.3.6 re.findall(pattern, string[, flags]) ............................... 258 
14.3.7 re.finditer(pattern, string[, flags]) .............................. 258 
14.3.8 re.split(pattern, string[, maxsplit=0, flags=0]) .......... 259 
14.3.9 re.sub(pattern, repl, string[, count, flags]) ................. 259 
14.4 常用操作示例 ... 260 
14.4.1 驗證 .... 260 
14.4.2 提取 .... 261 
14.4.3 替換 .... 262 
14.4.4 切分 .... 262 
第15章 Ruby ..............263 
15.1 預備知識 ........... 263 
15.2 正則功能詳解 ... 264 
15.2.1 列表 .... 264 
15.2.2 字元組 264 
15.2.3 Unicode屬性 ......................... 265 
15.2.4 字元組簡記法........................ 266 
15.2.5 單詞邊界 ............................... 266 
15.2.6 行起始/結束位置 .................. 267 
15.2.7 環視 .... 268 
15.2.8 匹配模式 ............................... 268 
15.2.9 捕獲分組的引用 .................... 269 
15.3 正則API簡介 .. 269 
15.3.1 Regexp 269 
15.3.2 Regexp.match(text) ................ 271 
15.3.3 Regexp.quote(text)和Regexp.escape(text) ............... 272 
15.3.4 String.index(Regexp) ............. 273 
15.3.5 String.scan(Regexp) ............... 273 
15.3.6 String.slice(Regexp) ............... 274 
15.3.7 String.split(Regexp) ............... 274 
15.3.8 String.sub(Regexp, Str) .......... 275 
15.3.9 String.gsub(Regexp, String) ... 276 
15.4 常用操作示例 ... 276
15.4.1 驗證 .... 276 
15.4.2 提取 .... 277 
15.4.3 替換 .... 277 
15.4.4 切分 .... 277 
15.5 Ruby 1.9的新變化 .............................. 278 
第16章 Objective-C ..280 
16.1 預備知識 ........... 280 
16.2 正則功能詳解 ... 282 
16.2.1 列表 .... 282 
16.2.2 字元組 283 
16.2.3 Unicode屬性 ......................... 284 
16.2.4 字元組簡記法........................ 284 
16.2.5 單詞邊界 ............................... 285 
16.2.6 行起始/結束位置 .................. 286 
16.2.7 環視 .... 287 
16.2.8 匹配模式 ............................... 287 
16.2.9 純文本模式 ........................... 288 
16.2.10 捕獲分組的引用 .................. 289 
16.2.11 命名分組 .............................. 290 
16.3 正則API簡介 .. 291 
16.3.1 predicateWithFormat .............. 291 
16.3.2 rangeOfString ......................... 292 
16.3.3 regularExpressionWithPattern 292 
16.3.4 initWithPattern ....................... 292 
16.3.5 pattern . 293 
16.3.6 numberOfCaptureGroups ....... 293 
16.3.7 numberOfMatchesInString ..... 293 
16.3.8 stringByReplacingMatchesInString .......................... 294 
16.3.9 replacingMatchesInString ...... 294 
16.3.10 escapedPatternForString ...... 294 
16.3.11 escapedTemplateForString ... 295 
16.4 常用操作示例 ... 295 
16.4.1 驗證 .... 295 
16.4.2 提取 .... 295 
16.4.3 替換 .... 297 
16.4.4 切分 .... 298 
第17章 Golang...........299 
17.1 預備知識 ........... 299 
17.2 正則功能詳解 ... 301 
17.2.1 列表 .... 301 
17.2.2 字元組 301 
17.2.3 Unicode屬性 ......................... 302 
17.2.4 字元組簡記法........................ 303 
17.2.5 單詞邊界 ............................... 303 
17.2.6 行起始/結束位置 .................. 303 
17.2.7 環視 .... 304 
17.2.8 匹配模式 ............................... 304 
17.2.9 純文本模式 ........................... 305 
17.2.10 捕獲分組的引用 .................. 305 
17.2.11 命名分組 .............................. 306 
17.3 正則API簡介 .. 307 
17.3.1 Compile和MustCompile ...... 307 
17.3.2 MatchString ........................... 308 
17.3.3 FindString .............................. 308 
17.3.4 FindAllString ......................... 309 
17.3.5 FindStringIndex ..................... 309 
17.3.6 FindAllStringIndex ................ 309 
17.3.7 FindStringSubmatch .............. 309 
17.3.8 FindAllStringSubmatch ......... 310 
17.3.9 SubexpNames ........................ 310 
17.3.10 Split ... 311 
17.3.11 ReplaceAllString .................. 311 
17.3.12 ReplaceAllLiteralString ....... 312 
17.4 常用操作示例 ... 312 
17.4.1 驗證 .... 312 
17.4.2 提取 .... 312 
17.4.3 替換 .... 313 
17.4.4 切分 .... 313 
第18章 Linux/UNIX ....314 
18.1 POSIX ............... 314 
18.1.1 POSIX規範 ........................... 314 
18.1.2 POSIX字元組 ....................... 316 
18.2 vi ....................... 317 
18.2.1 字元組及簡記法 .................... 317 
18.2.2 量詞 .... 318 
18.2.3 多選結構和捕獲分組 ............ 319 
18.2.4 環視 .... 319 
18.2.5 錨點和單詞邊界 .................... 319 
18.2.6 替換操作的特殊字元 ............ 320 
18.2.7 replacement中的特殊變數 ... 322 
18.2.8 補充 .... 322 
18.3 grep ................... 323 
18.3.1 基本用法 ............................... 323 
18.3.2 字元組 324 
18.3.3 錨點和單詞邊界 .................... 324 
18.3.4 量詞 .... 324 
18.3.5 多選結構和捕獲分組 ............ 325 
18.3.6 options . 325 
18.3.7 egrep和fgrep ........................ 326 
18.3.8 補充 .... 327 
18.4 awk .................... 327 
18.4.1 基本用法 ............................... 327 
18.4.2 字元組及簡記法 .................... 328 
18.4.3 錨點和單詞邊界 .................... 329 
18.4.4 量詞 .... 329 
18.4.5 多選結構 ............................... 330 
18.4.6 補充 .... 330 
18.5 sed ..................... 330 
18.5.1 基本用法 ............................... 330 
18.5.2 字元組及簡記法 .................... 331 
18.5.3 錨點和單詞邊界 .................... 331 
18.5.4 量詞 .... 332 
18.5.5 多選結構和捕獲分組 ............ 332
18.5.6 options . 333 
18.5.7 補充 .... 333 
18.6 總結................... 334 
附錄A 常用語言中正則特性一覽 ....................337 
附錄B 常用的正則運算式 ...............................340 
附錄C 常用的正則運算式工具及資源 .............356 
正則運算式術語中英文對照表 ...........................363