java流与文件——正则表达式
【0】README
0.1) 本文描述轉自 core java volume 2, 旨在理解 java流與文件——正則表達式 的相關知識; 
 0.2) there are my original source code below, and for them , please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter1/RegularExprTest.java
【1】正則表達式相關
1)正則表達式定義: 正則表達式用于指定字符串的模式, 你可以在任何需要定位匹配某種特定模式的字符串的情況下使用正則表達式; 
 2)看個荔枝: 
 [Ji]ava.+ 
- 2.1)匹配下列形式的所有字符串: 
第一個字母是 J 或 j;
接下來3個字母是 ava;
字符串的其余部分是一個或多個任意的字符構成; 
3)正則表達式的語法:
- 3.1)字符類:是一個括在括號中的可選擇的字符集,如[Jj], [0-9], [A-Za-z]或[^0-9]; (干貨——正則表達式中的字符類[] )
 - 3.2)如果字符類包含 “-”,那么它必須是第一項或最后一項; 如果要包含“[”,那么它必須是第一項; 如果要包含“^”,那么它可以是除開始位置之外的任何位置。其中, 你只需要轉義 “[” 和 “\”;
 - 3.3)有許多預定的 字符類: 例如\d(數字) 和 \p{Sc};
 - 3.4)大部分字符都可以與它們自身進行匹配;
 - 3.5)符號可以匹配任何字符;
 - 3.6)使用 \ 作為轉義字符, 例如 . 匹配句號 而 \ 匹配反斜線;
 - 3.7) ^ 和 $ 分別匹配一行的開頭和結尾;
 - 3.8)如果 X 和 Y 是 正則表達式, 那么XY 表示“任何X的匹配后面跟隨Y的匹配”, X|Y表示 “任何 X 或 Y 的 匹配”;
 3.9)你可以將量詞運用到表達式: X:X+(1個或多個), X*(0個或多個), 與 X?(0個或1個);(干貨——將量詞 + ,*,?運用到表達式)
3.10)默認情況下: 量詞要匹配能夠使整個匹配成功的最大可能的重復次數。你可以修改這種行為, 方法是使用后綴?或使用 后綴 + ;
- 3.11)荔枝: 字符串cab 匹配 [a-z]ab, 但不匹配[a-z]+ab;
 
對以上荔枝的分析(Analysis): (干貨——正則表達式中的貪婪匹配問題)
- A1)第一種case中: 表達式[a-z]* 只匹配字符c, 字符ab 匹配剩余部分;
 A2)第二種case中: 貪婪版本 [a-z]*+ 將匹配字符 cab, 模式 的剩余部分將無法匹配;
3.12)我們使用群組來定義子表達式, 其中群組用括號() 括起來: 例如, ([+-]?)([0-9]+);然后, 你可以詢問模式匹配器, 讓其返回每個組的匹配,或者用 \n 引用某個群組, 其中 n 是群組號(從 \1 開始); (干貨——使用群組來定義子表達式,群組用括號() 括起來)
4)正則表達式的簡單用法就是測試某個特定的字符串是否與他匹配,下面展示了如何用java 來編寫這段程序:
- 4.1)首先用 表示正則表達式的字符串構建一個 Pattern 對象
 - 4.2)然后從這個模式獲得一個 Matcher, 并調用它的 matches 方法:
 
- 4.3)這個匹配器的輸入可以是任何實現了 CharSequence 接口的類對象, 例如 String, StringBuilder 和 CharBuffer;
 - 4.4)在編譯這個模式時, 你可以設置一個或多個標志,如:
 
4.5)下面是所支持的六種標志:
- 4.5.1)CASE_INSENSITIVE: 匹配字符時忽略字母的大小寫, 默認情況下, 這個標志只考慮US ASCII 字符;
 - 4.5.2)UNICODE_CASE: 當與 CASE_INSENSTITIVE 組合時, 用 Unicode 字母的大小來匹配;
 - 4.5.3)MULTIINE: ^ 和 $ 匹配行 的開頭和結尾, 而不是整個輸入的開頭和結尾;
 - 4.5.4)UNIX_LINES: 在多行模式中 匹配 ^ 和 $ 時, 只有 ‘\n’ 被識別成行終止符;
 - 4.5.5)DOTALL: 當使用這個標志時, . 符號匹配所有字符, 包括行終止符;
 - 4.5.6)CANON_EQ: 考慮 Unicode 字符規范 的等價性;
 
5)如果正則表達式包含群組, 那么 Matcher 對象可以揭示群組的邊界, 下面的方法: (干貨——正則表達式包含群組, 那么 Matcher 對象可以揭示群組的邊界)
int start(int groupIndex) int end(int groupIndex)將產生指定群組的開始索引和結束之后的索引;- 5.1)你可以直接通過調用下面的方法抽取匹配的字符串: 
String group(int groupIndex) 5.2)群組0 是這個輸入, 而用于第一個實際群組的索引是1. 調用 groupCount 方法可以獲得全部群組的數量;
5.3) 嵌套群組是按照前括號排序的, 例如,我們有下面的模式:
- 那么, 匹配器會報告下面 的群組: 
 
6)通常你不希望用正則表達式來匹配全部輸入,而只是想找出輸入中一個或多個匹配的子字符串。
- 6.1)可以用 Matcher 類的 find 方法 來查找匹配內容, 如果返回 true, 再使用 start 和 end 方法來查找匹配的內容:
 
7) Matcher類的 replaceAll 方法將 正則表達式出現的所有地方 都用 替換字符串來替換;
- 7.1)如, 下面的指令將所有的數字序列都替換為 # 字符:
 
- 7.2) 替換字符串可以包含對模式中群組的引用: $n 表示替換成第n 個數組, 因此我們需要用 $ 來表示在替換文本中包含一個 $ 字符;
 - 7.3)如果字符串包含 $ 和 \ , 但又不希望它們被解釋為 群組的替換符, 那么就可以調用
 
- 7.4) 最后, Pattern類有一個 split 方法, 它可以用 正則表達式來匹配邊界,從而將輸入分割成字符串數組;** 
- 7.4.1)看個荔枝: 下面的指令可以將輸入 分割成標記, 其中分隔符是由可選的空白字符包圍的標點符號:(干貨——Pattern.split 方法參見“4.2” 中的荔枝)
 
 
總結
以上是生活随笔為你收集整理的java流与文件——正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 如果被ddos应该怎么处理(如果被ddo
 - 下一篇: 写专题网页怎么设计(写专题网页怎么设计的