Java正则表达式语法规则(具体)
一、正則表達式作用
????????正則表達式定義了字符串的模式,可以用于搜索、編輯或處理文本。
二、Java正則表達式語法規則
1.先清晰一個問題——?轉義字符
????????例如:
????????在C語言中,“\n”表示換行,同樣的Java中我們也可以使用“\n”表示換行。對于單個“\”如“\\”,其后字符表示轉義字符,輸出一個反斜杠“\”。但是雙“\\”則表明要插入正則表達式的反斜線,其后的字符具有特殊含義。所以在 Java 正則表達式中需要有兩個反斜杠才能被解析為其他語言中的轉義功能。或者說在 Java 正則表達式中,兩個?\\?代表其他語言中的一個?\,這也就是為什么表示一位數字的正則表達式是?\\d,而表示一個普通的反斜杠是?\\。如下所示。
System.out.print("\\"); // 輸出為 \ System.out.print("\\\\"); // 輸出為 \\2.正則表達式語法
| \ | 將下一字符標記為特殊字符、文本、反向引用或進制轉義符。 例:“\n” 表示換行符,“\\(” 表示 "("。 |
| ^ | 匹配字符串開始輸入的位置。 |
| $ | 匹配輸入的字符串最末位置。 |
| * | 零次或多次匹配前面的字符或子表達式。 例: zo* 匹配"z"和"zoo"。* 相當于 {0,}。 |
| + | 至少有一次匹配前面的字符或子表達式。 例: "zo+"與"zo"和"zoo"匹配,但與"z"不匹配。+ 相當于 {1,}。 |
| ? | 零次或一次匹配前面的字符或子表達式。 例:"do(es)?"匹配"do"或"does"中的"do"。? 相當于 {0,1}。 |
| {n} | 匹配指定的?n?次。(n為非負整數) 例:"o{2}"與"food"中的兩個"o"匹配。 |
| {n,} | 最少匹配?n?次。(n為非負整數) 例: "o{2,}",至少匹配2次,所以"foood"中有 3個o,匹配了3次。 |
| {n,m} | 最少匹配?n?次,最多匹配?m?次。(n、m為非負整數,n?<=?m) 例:"o{1,3}"匹配1-3個o,所以匹配"fooooood"的前3個o。 PS:逗號和數字之間不能有空格。 |
| ? | 字符 ? 緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后時,表示匹配模式是"非貪心的",其搜索盡可能短的字符串,默認的"貪心"模式搜索盡可能長的字符串。 例:在字符串"oooo"中,"o+?"只匹配單個"o",而"o+"匹配所有"o"。 |
| . | 匹配除"\r 和 \n"之外的任何單個字符。 |
| (pattern) | 匹配?pattern?并捕獲該匹配的子表達式。若要匹配括號字符 ( ),使用"\("或者"\)"。 |
| (?:pattern) | 匹配?pattern?但不捕獲該匹配的子表達式。 |
| (?=pattern) | 執行正向預測先行搜索的子表達式,匹配處于匹配?pattern?的字符串的起始點的字符串。 |
| (?!pattern) | 執行反向預測先行搜索的子表達式,匹配不處于匹配?pattern?的字符串的起始點的字符串。 |
| x|y | 匹配?x?或?y。 例:'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"。 |
| [?xyz?] | 匹配包含在內的字符。 例:"[abc]"匹配"plainbc"中的"abc"。 |
| [^xyz] | 匹配不包含在內的字符。 例:"[^abc]"匹配"plain"中"p","l","i","n"。 |
| [a-z] | 匹配在范圍內的字符。 例:"[a-z]"匹配a-z的所有小寫字母。 |
| [^a-z] | 匹配不在范圍內的字符。 例:"[^a-z]"匹配除a-z以外的字符。 |
| \b | 匹配邊界字符。 例:"er\b"匹配邊界上的"er",不匹配"verb"中間的"er"。 |
| \B | 不匹配邊界字符。 例:"er\B"匹配"verb"中間的"er",不匹配"never"邊界上的"er"。 |
| \cx | 匹配?x?指示的控制字符。(x?的值必須在 A-Z 或 a-z 之間) 例:\cM 匹配 Control-M 或回車符。 |
| \d | 數字字符匹配。相當于 [0-9]。 |
| \D | 非數字字符匹配。相當于 [^0-9]。 |
| \f | 換頁符匹配。相當于 \x0c 和 \cL。 |
| \n | 換行符匹配。相當于 \x0a 和 \cJ。 |
| \r | 匹配一個回車符。相當于 \x0d 和 \cM。 |
| \s | 匹配任何空白字符,包括空格、制表符、換頁符等。 |
| \S | 匹配任何非空白字符。 |
| \t | 制表符匹配。相當于 \x09 和 \cI 。 |
| \v | 垂直制表符匹配。相當于?\x0b 和 \cK 。 |
| \w | 匹配任何字類字符,包括下劃線。相當于"[A-Za-z0-9_]"。 |
| \W | 與任何非單詞字符匹配。相當于"[^A-Za-z0-9_]"。 |
| \xn | 匹配?n,此處的?n?是一個十六進制轉義碼。十六進制轉義碼必須正好是兩位數長。 例:"\x41"匹配"A"。"\x041"與"\x04"&"1"等效。允許在正則表達式中使用 ASCII 代碼。 |
| \num | 匹配?num,此處的?num?是一個正整數。到捕獲匹配的反向引用。 例:"(.)\1"匹配兩個連續的相同字符。 |
| \n | 標識一個八進制轉義碼或反向引用。如果 \n?前面至少有?n?個捕獲子表達式,那么?n?是反向引用。否則,如果?n?是八進制數 (0-7),那么?n?是八進制轉義碼。 |
| \nm | 標識一個八進制轉義碼或反向引用。如果 \nm?前面至少有?nm?個捕獲子表達式,那么?nm?是反向引用。如果 \nm?前面至少有?n?個捕獲,則?n?是反向引用,后面跟有字符?m。如果兩種前面的情況都不存在,則 \nm?匹配八進制值?nm,其中?n?和?m?是八進制數字 (0-7)。 |
| \nml | 當?n?是八進制數 (0-3),m?和?l?是八進制數 (0-7) 時,匹配八進制轉義碼?nml。 |
| \un | 匹配?n,其中?n?是以四位十六進制數表示的 Unicode 字符。 例:\u00A9 匹配版權符號 (?)。 |
寫在最后, 需要區分不同哦:
? ? ? ? 在“Java語言規范”中,位于字符串中的單個反斜線(“\”)會被解釋為“轉義字符”。因此必須在字符串中使用雙反斜線(“\\”)才代表正則表達式,從而不被 Java 字節碼編譯器解釋。
????????例:“\b” 表示 退格;而 "\\b" 為正則表達式,表示匹配邊界字符。
? ? ? ? 例:?"\(hello\)" 是非法的;加上“\\” 后表示正則表達式,合法?"\\(hello\\)"。
總結
以上是生活随笔為你收集整理的Java正则表达式语法规则(具体)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git更新代码
- 下一篇: java语法正则表达式_详解Java正则