RegexTester是一款正則表達式測試器,支持單行模式、多行模式,經(jīng)典的窗口設(shè)計,該工具允許你測試和分析正則表達式。正則表達式通常用于兩種任務(wù):1.驗證,2.搜索/替換。用于驗證時,通常需要在前后分別加上^和$,以匹配整個待驗證字符串;搜索/替換時是否加上此限定則根據(jù)搜索的要求而定
功能簡介:
支持僅使用表達式里的選中部分進行匹配
支持樹形和表格兩種結(jié)果查看方式
選中樹結(jié)點或單元格時自動選中源文本中對應(yīng)的部分
表格內(nèi)容可導(dǎo)出為csv文件(在表格模式下,右擊結(jié)果,選擇彈出菜單里的"導(dǎo)出(*.csv)")
支持拖入文件作為匹配源文本
支持快捷鍵操作(F5運行, F4切換查詢替換模式, F6切換結(jié)果顯示方式, F2復(fù)制代碼, F8切換焦點)
支持生成并拷貝C#代碼到系統(tǒng)剪切板
支持忽略大小寫,單行模式,多行模式,忽略空白,顯式匹配等多種選項
自動加載上次關(guān)閉前運行的最后一組數(shù)據(jù)
可解析類似new Regex("abc", RegexOptions.Singleline | RegexOptions.Multiline)格式的C#代碼
正則表達式的預(yù)搜索:
正則表達式:(?<=src=\").*?(?=\") \"表示轉(zhuǎn)義,即雙引號"
其中(?<=)為反向預(yù)搜索,表示要匹配的字符串前面必須是scr="
(?=)為正向預(yù)搜索,表示要匹配的字符串后面必須是"
.*?表示要匹配的部分
比如:
正式表達式:(?<=src=\").*?(?=\")
待測試的文本:<img src="/UploadFiles/image/20140304/20140304094318_2971.png" alt="" />
那么執(zhí)行這個正則表達式后,就可以提取出/UploadFiles/image/20140304/20140304094318_2971.png
正則表達式入門:
\b匹配單詞的開始或結(jié)束
*表示重復(fù)0零次或多次
?表示重復(fù)0次或1次
+表示重復(fù)1次或多次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次
.表示除了換行符以外的任意字符
.*連在一起就意味著任意數(shù)量的不包含換行的字符
\d表示一位數(shù)字(0,或1,或2…或9)
\s表示任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格
\w匹配字母或數(shù)字或下劃線或漢字
^匹配字符串的開始
$匹配字符串的結(jié)束
\表示轉(zhuǎn)義,比如\"表示",\(表示(
[]表示范圍,比如[.?!]匹配標(biāo)點符號(.或?或!),[0-9]代表的含意與\d就是完全一致的:表示1位數(shù)字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考慮英文的話)
|表示分支(或者),比如\d{5}-\d{4}|\d{5}這個表達式用于匹配美國的郵政編碼。美國郵編的規(guī)則是5位數(shù)字,或者用連字號間隔的9位數(shù)字。之所以要給出這個例子是因為它能說明一個問題:使用分枝條件時,要注意各個條件的順序。如果你把它改成\d{5}|\d{5}-\d{4}的話,那么就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。
我們已經(jīng)提到了怎么重復(fù)單個字符(直接在字符后面加上限定符就行了);但如果想要重復(fù)多個字符又該怎么辦?你可以用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復(fù)次數(shù)了,你也可以對子表達式進行其它一些操作(后面會有介紹)。
(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹配1到3位的數(shù)字,(\d{1,3}\.){3}匹配三位數(shù)字加上一個英文句號(這個整體也就是這個分組)重復(fù)3次,最后再加上一個一到三位的數(shù)字(\d{1,3})。
IP地址中每個數(shù)字都不能大于255. 經(jīng)常有人問我, 01.02.03.04 這樣前面帶有0的數(shù)字, 是不是正確的IP地址呢? 答案是: 是的, IP 地址里的數(shù)字可以包含有前導(dǎo) 0 (leading zeroes).
不幸的是,它也將匹配256.300.888.999這種不可能存在的IP地址。如果能使用算術(shù)比較的話,或許能簡單地解決這個問題,但是正則表達式中并不提供關(guān)于數(shù)學(xué)的任何功能,所以只能使用冗長的分組,選擇,字符類來描述一個正確的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
理解這個表達式的關(guān)鍵是理解2[0-4]\d|25[0-5]|[01]?\d\d?
\W匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S匹配任意不是空白符的字符
\D匹配任意非數(shù)字的字符
\B匹配不是單詞開頭或結(jié)束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou這幾個字母以外的任意字符
例子:\S+匹配不包含空白符的字符串。
<a[^>]+>匹配用尖括號括起來的以a開頭的字符串。