正則表達式(regular expression)

概念

正則表達式是對字符串操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯正則表達式

爲何使用正則表達式?

典型的搜索和替換操做要求您提供與預期的搜索結果匹配的確切文本。雖然這種技術對於對靜態文本執行簡單搜索和替換任務可能已經足夠了,但它缺少靈活性,若採用這種方法搜索動態文本,即便不是不可能,至少也會變得很困難。app

  • 經過使用正則表達式,能夠:

  測試字符串內的模式。例如,能夠測試輸入字符串,以查看字符串內是否出現電話號碼模式或信用卡號碼模式。這稱爲數據驗證。測試

  替換文本。可使用正則表達式來識別文檔中的特定文本,徹底刪除該文本或者用其餘文本替換它。this

  基於模式匹配從字符串中提取子字符串。能夠查找文檔內或輸入域內特定的文本。spa

語法

正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱爲"元字符")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式做爲一個模板,將某個字符模式與所搜索的字符串進行匹配。code

匹配規則示例

^once:這個模式包含一個特殊的字符^,表示該模式只匹配那些以once開頭的字符串。例如該模式與字符串"once upon a time"匹配,與"There once was a man from NewYork"不匹配。
bucket$:這個模式與"Who kept all of this cash in a bucket"匹配,與"buckets"不匹配。
^bucket$:只匹配字符串"bucket"。
once:與任何包含該模式的字符串匹配。
[a-z] :匹配全部的小寫字母 
[A-Z] :匹配全部的大寫字母 
[a-zA-Z]:匹配全部的字母 
[0-9]:匹配全部的數字 
[0-9\.\-]:匹配全部的數字,句號和減號 
[ \f\r\t\n]:匹配全部的白字符
^[a-z][0-9]$:匹配一個由一個小寫字母和一位數字組成的字符串,好比"z2""t6""g7",但不是"ab2""r2d3""b52"
^[^0-9][0-9]$:前面曾經提到^表示字符串的開頭,但它還有另一個含義。當在一組方括號裏使用^是,它表示"""排除"的意思,經常用來剔除某個字符。前面的例子要求第一個字符不能是數字
^[a-zA-Z_]$     全部的字母和下劃線
^[[:alpha:]]{3}$     全部的3個字母的單詞
^a$     字母a
^a{4}$     aaaa
^a{2,4}$     aa,aaa或aaaa
^a{1,3}$     a,aa或aaa
^a{2,}$     包含多於兩個a的字符串
^a{2,}     如:aardvark和aaab,但apple不行
a{2,}     如:baad和aaa,但Nantucket不行
\t{2}     兩個製表符
.{2}     全部的兩個字符
^[a-zA-Z0-9_]{1,}$ //全部包含一個以上的字母、數字或下劃線的字符串 
^[0-9]{1,}$ //全部的正數 
^\-{0,1}[0-9]{1,}$ //全部的整數 
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //全部的小數
^\-?[0-9]{0,}\.?[0-9]{0,}$:特殊字符"?"與{0,1}是相等的,它們都表明着:"0個或1個前面的內容""前面的內容是可選的"
^[a-zA-Z0-9_]+$ //全部包含一個以上的字母、數字或下劃線的字符串 
^[0-9]+$ //全部的正數 
^\-?[0-9]+$ //全部的整數 
^\-?[0-9]*\.?[0-9]*$ //全部的小數

正則表達式示例

/a/
/7/
/M/
/a7M/
/a.c/:句點 (.) 匹配字符串中的各類打印或非打印字符,只有一個字符例外。這個例外就是換行符 (\n)。前面的正則表達式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c
/Chapter [12345]/或/Chapter [1-5]/:中括號表達式,括在中括號表達式中的字符只匹配處於正則表達式中該位置的單個字符。正則表達式匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5
/Chapter [^12345]/或/Chapter [^1-5]/:若要查找不在列表或範圍內的全部字符,請將插入符號 (^) 放在列表的開頭。若是插入字符出如今列表中的其餘任何位置,則它匹配其自己。前面的示例中,表達式在第九個位置匹配 12345 以外的任何數字和字符。這樣,例如,Chapter 7 就是一個匹配項,Chapter 9 也是一個匹配項。

/^Chapter|Section [1-9][0-9]{0,1}$/:上面的正則表達式要麼匹配行首的單詞 Chapter,要麼匹配行尾的單詞 Section 及跟在其後的任何數字。若是輸入字符串是 Chapter 22,那麼上面的表達式只匹配單詞 Chapter。若是輸入字符串是 Section 22,那麼該表達式匹配 Section 22/^(Chapter|Section) [1-9][0-9]{0,1}$/:表達式匹配出如今行首和行尾、後面跟一個或兩個數字的 Chapter 或 Section。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/:防止匹配被保存。除 ?: 元字符外,兩個其餘非捕獲元字符建立被稱爲"預測先行"匹配的某些內容。正向預測先行使用 ?= 指定,它匹配處於括號中匹配正則表達式模式的起始點的搜索字符串。反向預測先行使用 ?! 指定,它匹配處於與正則表達式模式不匹配的字符串的起始點的搜索字符串。

/\b([a-z]+) \1\b/gi 一個單詞連續出現的位置。 /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 將一個URL解析爲協議、域、端口及相對路徑。 /^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章節的位置。 /[-a-z]/ :A至z共26個字母再加一個-號。 /ter\b/:可匹配chapter,而不能匹配terminal。 /\Bapt/:可匹配chapter,而不能匹配aptitude。 /Windows(?=95 |98 |NT )/ :可匹配Windows95或Windows98或WindowsNT,當找到一個匹配後,從Windows後面開始進行下一次的檢索匹配。 /^\s*$/ :匹配空行。 /\d{2}-\d{5}/:驗證由兩位數字、一個連字符再加 5 位數字組成的 ID 號。 /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ :匹配 HTML 標記。
相關文章
相關標籤/搜索