下面我就為大家帶來一篇正規表示式(語法篇推薦)。現在就分享給大家,也給大家做個參考。
正規表示式的建構摘要
建構比對
字元
x 字元x
\\ 反斜線字元
\0n 帶有八進位值0 的字元n (0 <= n <= 7)
\0nn 帶有八進位值0 的字元nn (0 <= n <= 7)
\0mnn 帶有八進位值0 的字元mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 有十六進位值0x 的字元hh
\uhhhh 帶有十六進位值0x 的字元hhhh
\t 製表符('\u0009')
\n 新行(換行)符('\u000A ')
\r 回車符號('\u000D')
\f 換頁符號('\u000C')
\a 警報(bell) 符號('\u0007')
\ e 轉義符('\u001B')
\cx 對應於x 的控制符
字元類別
[abc] a、b 或c(簡單類別)
[^abc] 任何字符,除了a、b 或c(否定)
[a-zA-Z] a 到z 或A 到Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a 到d 或m 到p:[a-dm-p](並集)
[a-z&&[def]] d、e 或f(交集)
[ a-z&&[^bc]] a 到z,除了b 和c:[ad-z](減)
[a-z&&[^m-p]] a 到z,而非m 到p:[a -lq-z](減去)
預定義字元類別
. 任何字元(與行結束符號可能匹配也可能不匹配)
\ d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字元:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單字字元:[a-zA-Z_0-9]
\W 非單字字元:[^\w]
POSIX 字元類別(僅US- ASCII)
\p{Lower} 小寫字母字元:[a-z]
\p{Upper} 大寫字母字元:[A-Z]
\p{ASCII} 所有ASCII:[\x00-\x7F]
\p{Alpha} 字母字元:[\p{Lower}\p{Upper}]
\p{Digit} 十進位數:[0-9]
\p{Alnum} 字母數字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 標點符號:!"#$%&'()* ,-./:;<=>?@[\] ^_`{|}~
\p{Graph} 可見字元:[\p{Alnum}\p{Punct}]
\p{Print} 可列印字元:[\p{Graph}\x20 ]
\p{Blank} 空格或製表符:[ \t]
\p{Cntrl} 控製字元:[\x00-\x1F\x7F]
\p{XDigit} 十六進制數字:[0-9a-fA-F]
\p{Space} 空白字元:[ \t\n\x0B\f\r]
java.lang.Character 類別(簡單的java 字元類型)
\p{javaLowerCase} 等效於java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效於java.lang.Character.isUpperCase()
\p{ javaWhitespace} 等效於java.lang.Character.isMirrored()
\p{InGreek} Greek 區塊(簡單區塊)中的字元
\p{Lu} 大寫字母(簡單類別)
\p{Sc} 貨幣符號
\P{InGreek} 所有字符,Greek 區塊中的除外(否定)
[\p{L}&&[^\p{Lu}]] 所有字母,大寫字母除外(減)
邊界匹配器
^ 行的開頭$ 行的結尾
\b 單字邊界
\B 非單字邊界
\A 輸入的開頭
\ G 上一個符合的結尾
\Z 輸入的結尾,只用於最後的結束符號(如果有的話)
\z 輸入的結尾
Greedy 數量詞
X? X,一次或一次也沒有X* X,零次或多次
X X,一次或多次
X{n} X,剛好n次
X{n,} X,至少n 次
X{n,m} X,至少n 次,但不超過m 次
Reluctant 數量詞
X*? X,零次或多次
X ? X,一次或多次
X{n}? X,剛好n 次
X{n,}? X,至少n 次
X{n,m}? X,至少n 次,但不超過m 次
Possessive 數量詞
X? X,一次或一次也沒有X* X,零次或多次
X X,一次或多次
X{n} X,剛好n 次
X{n,} X,至少n 次
X{n,m} X,至少n 次,但不超過m 次
Logical 運算子
XY X 後面跟著YX|Y X 或Y
(X) X,作為捕獲組
Back 引用
\n 任何匹配的nth 捕獲組引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到\E
\E Nothing,但是結束從\Q開始的引用
特殊構造(非捕獲)
(?:X) X,作為非捕獲組
(?idmsux-idmsux) Nothing,但是將匹配標誌i d m s u x on - off
(?idmsux-idmsux:X) X,作為帶有給定標誌i d m s u x on - off
的非捕獲組 (?=X) X,通過零寬度的正lookahead
(?!X) X,通過零寬度的負lookahead
(?<= X) X,經過零寬度的正lookbehind
(?(?>X) X,作為獨立的非捕獲組
-------------------------------------------------
反斜線、轉義和引用
#反斜線字元('\') 用於引用轉義構造,如上表所定義的,同時也用於引用其他將被解釋為非轉義構造的字元。因此,表達式 \\ 與單一反斜線匹配,而 \{ 與左括號匹配。
在不表示轉義構造的任何字母字元前使用反斜線都是錯誤的;它們是為將來擴展正規表示式語言保留的。可以在非字母字元前使用反斜線,不管該字元是否非轉義構造的一部分。
根據 Java Language Specification 的要求,Java 原始碼的字串中的反斜線被解釋為 Unicode 轉義或其他字元轉義。因此必須在字串字面值中使用兩個反斜線,表示正規表示式受到保護,並且不被 Java 字節碼編譯器解釋。例如,當解釋為正規表示式時,字串字面值 "\b" 與單一退格字元匹配,而 "\\b" 與單字邊界匹配。字串字面值 "\(hello\)" 是非法的,將導致編譯時錯誤;要與字串 (hello) 匹配,必須使用字串字面值 "\\(hello\\)"。
字元類別
字元類別可以出現在其他字元類別中,並且可以包含並集運算子(隱含)和交集運算子 (&&)。並集運算子表示至少包含其某個運算元類別中所有字元的類別。交集運算子表示包含同時位於其兩個運算元類別中所有字元的類別。
字元類別運算子的優先權如下所示,依照從最高到最低的順序排列:
##1 字面值轉義 \x2 分組[...]
3 範圍a-z
4 並集合[a-e][i-u]
5 交集[a-z&&[aeiou]]
行結束符號
行結束符號 是一個或兩個字元的序列,標記輸入字元序列的行結尾。以下程式碼被辨識為行結束符:新行(換行)符('\n')、後面緊跟著新行符的回車符("\r\n")、
單獨的回車符號('\r')、
下一行字元('\u0085')、
行分隔符號('\u2028') 或
段落分隔符號('\ u2029)。
如果啟動 UNIX_LINES 模式,則新行符是唯一識別的行結束符號。
群組與擷取
擷取群組可以透過從左到右計算其開括號來編號。例如,在表達式((A)(B(C))) 中,有四個這樣的群組:#1 ((A)(B(C)))2 \A
3 (B(C))
4 (C)
以上是正規表示式(語法篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!