正則表達式

元字符

元字符 描述
. 匹配除換行符之外的任意字符。
[ ] 字符類,匹配方括號中包含的任意字符。
[^ ] 否認字符類。匹配方括號中不包含的任意字符
* 匹配前面的子表達式零次或屢次
+ 匹配前面的子表達式一次或屢次
? 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。
{n,m} 花括號,匹配前面字符至少 n 次,可是不超過 m 次。
(xyz) 字符組,按照確切的順序匹配字符xyz。
| 分支結構,匹配符號以前的字符或後面的字符。
\ 轉義符,它能夠還原元字符原來的含義,容許你匹配保留字符 [ ] ( ) { } . * + ? ^ $  |
^ 匹配行的開始
$ 匹配行的結束

簡寫字符集

簡寫 描述
. 匹配除換行符之外的任意字符
\w 匹配全部字母和數字的字符: [a-zA-Z0-9_]
\W 匹配非字母和數字的字符: [^\w]
\d 匹配數字: [0-9]
\D 匹配非數字: [^\d]
\s 匹配空格符: [\t\n\f\r\p{Z}]
\S 匹配非空格符: [^\s]

斷言

後行斷言和先行斷言有時候被稱爲斷言,它們是特殊類型的 非捕獲組 (用於匹配模式,但不包括在匹配列表中)。當咱們在一種特定模式以前或者以後有這種模式時,會優先使用斷言。
例如咱們想獲取輸入字符串 $4.44 and $10.88 中 $ 字符以前的全部數字。咱們可使用這個正則表達式 (?<=\$)[0-9\.]*,表示: 獲取 $ 字符以前的全部的數字包含 . 字符。
如下是正則表達式中使用的斷言:html

符號 描述
?= 正向先行斷言
?! 負向先行斷言
?<= 正向後行斷言
?<! 負向後行斷言

正向先行斷言

正向先行斷言認爲第一部分的表達式必須是先行斷言表達式。返回的匹配結果僅包含與第一部分表達式匹配的文本。
要在一個括號內定義一個正向先行斷言,在括號中問號和等號是這樣使用的 (?=...)。先行斷言表達式寫在括號中的等號後面。
例如正則表達式 (T|t)he(?=\sfat),表示: 匹配大寫字母 T 或小寫字母 t,後面跟字母 h,後跟字母 e
在括號中,咱們定義了正向先行斷言,它會引導正則表達式引擎匹配 The 或 the 後面跟着 fat正則表達式

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

負向先行斷言

當咱們須要從輸入字符串中獲取不匹配表達式的內容時,使用負向先行斷言。負向先行斷言的定義跟咱們定義的正向先行斷言同樣,
惟一的區別是否是等號 =,咱們使用否認符號 !,例如 (?!...)
咱們來看看下面的正則表達式 (T|t)he(?!\sfat),表示: 從輸入字符串中獲取所有 The 或者 the 且不匹配 fat 前面加上一個空格字符。code

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

正向後行斷言

正向後行斷言是用於獲取在特定模式以前的全部匹配內容。正向後行斷言表示爲 (?<=...)。例如正則表達式 (?<=(T|t)he\s)(fat|mat),表示: 從輸入字符串中獲取在單詞 The 或 the 以後的全部 fat 和 mat 單詞。htm

"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

負向後行斷言

負向後行斷言是用於獲取不在特定模式以前的全部匹配的內容。負向後行斷言表示爲 (?<!...)。例如正則表達式 (?<!(T|t)he\s)(cat),表示: 在輸入字符中獲取全部不在 The 或 the 以後的全部單詞 catblog

"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

標記

標記 描述
i 不區分大小寫: 將匹配設置爲不區分大小寫。
g 全局搜索: 搜索整個輸入字符串中的全部匹配。
m 多行匹配: 會匹配輸入字符串每一行。

經常使用正則表達式

  • 正整數^\d+$
  • 負整數^-\d+$
  • 電話號碼^+?[\d\s]{3,}$
  • 電話代碼^+?[\d\s]+(?[\d\s]{10,}$
  • 整數^-?\d+$
  • 用戶名^[\w\d_.]{4,16}$
  • 字母數字字符^[a-zA-Z0-9]*$
  • 帶空格的字母數字字符^[a-zA-Z0-9 ]*$
  • 密碼^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$
  • 電子郵件^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$
  • IPv4 地址^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$
  • 小寫字母^([a-z])*$
  • 大寫字母^([A-Z])*$
  • 網址^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
  • VISA 信用卡號碼^(4[0-9]{12}(?:[0-9]{3})?)*$
  • 日期 (MM/DD/YYYY)^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
  • 日期 (YYYY/MM/DD)^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$
  • 萬事達信用卡號碼^(5[1-5][0-9]{14})*$
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息