祝平次的教學網站- Regular Expression (正[則規]表[達示]式)
文章推薦指數: 80 %
Regular Expression (正[則規]表[達示]式) ... 請注意RegEx中用的符號都是半型。
... 如果設定了RegExp物件的Multiline屬性,^也符合「\n」或「\r」之後的位置。
SearchthissiteSkiptomaincontentSkiptonavigationRegularExpression(正[則規]表[達示]式)以下由維基的表格改寫,請大家利用寄給大家的練習資料夾(data)中的子資料夾「莊子」進行練習。
第一層表示的是,輸入的正則表示式。
請打開Notepad++請在功能列點選「檢視(V)」,然後點選「文件夾工作區(W)」來打開文件夾工作區(在視窗左邊)。
將滑鼠移到文件夾工作區的空白處,按下滑鼠右鍵;待小視窗跳出來後,點選視窗中的「Add」,然後利用資料夾選擇視窗,選擇下載並解壓縮的data資料夾。
然後按一下data資料夾前的「+」號,來展開子資料夾。
子資料夾中的「莊子」,就是我們要用來練習的材料。
請將滑鼠游標移到「莊子」子資料夾,並按一下滑鼠右鍵;待小視窗跳出時,點選第二項「FindinFiles」待「FileinFiles」檢索視窗在螢幕中間出現時,點選此檢索視窗左下角的「規則運算式」,然後利用「尋找內容」後面的欄位,來輸入我們下面練習的正則表達式(RegularExpression),然後按下「全部尋找」來看下面正則表達式的結果。
逍如果輸入一個字詞,就和我們平常使用的檢索沒有什麼不同。
檢索「逍」,可以在5個檔案裏,找到6次(6hitsin5files)逍遙檢索「逍遙」,也可以在5個檔案裏,找到6次。
所以我們知道,在《莊子》裏,「逍」只會和「遙」一起出現。
[逍遙][]方括號,表示找的是方括號裏任何一個字元:所以在我們的例子裏,會找出所有的「逍」字和「遙」字。
請注意RegEx中用的符號都是半型。
檢索「[逍遙]」,也可以在7個檔案裏,找到14次。
配合上面的結果,我們可以推測出,在其它2個檔案裏,「遙」各出現1次。
[逍遙遊]大檢索「[逍遙遊]」,也可以在51個檔案裏,找到95次。
配合上面的結果,我們可以推測出,「遊」總共出現81次。
逍遙遊檢索「逍遙遊」,在0個檔案裏,發現0次。
「逍遙遊」雖然是《莊子》首篇的篇名,但並沒有成為三字詞出現在內文裏。
[逍遙]之如果我們把一個一般檢索的「之」字和選擇任何一個字元的「[逍遙]」,會找出所有的「逍之」和「遙之」。
檢索「[逍遙]之」,可以在1個檔案裏,找到1次。
蜩|學鳩如果要找的是一個或一個字元以上的字詞,我們使用的是半型的「|」。
檢索「蜩|學鳩」,可以找到「蜩」或「學鳩」,亦即找出所有的「蜩」與「學鳩」;在5個檔案裏,可以找到9次。
(蜩|學鳩)笑如果要把「蜩|學鳩」和一個一般的檢索字詞連在一起,比如說「笑」合成一個正則表示式,找出所有的「蜩笑」或「學鳩笑」,我們必須利用半型括號先把「蜩|學鳩」括起來,做為複合型的一個部分,否則我們會打成「蜩|學鳩笑」,找出來的會是「蜩」與「學鳩笑」而不是「蜩笑」與「學鳩笑」。
()可以幫我們組成群組,也可以讓複合式的正則表示式更容易理解。
也因為()可以把不同的部分群組起來,所以可以讓正則表示式可以累聚起來成為更複雜的樣式,功能也就更強大。
例如:「[逍遙](之(蜩|學鳩)笑)」會先找出「逍」或「遙」字,再找出括號中的「之蜩笑」或「之學鳩笑」;合併起來的結果,就是會找出:1)「逍之蜩笑」;2)「遙之蜩笑」;3)「逍之學鳩笑」;4)「遙之學鳩笑」。
另外,部分的正則表示式群組起來以後,就可以用代碼來指稱它們。
同樣的這也大大增加了正則表示式的功能,也讓正則表示式的「取代」的功能可以較抽象化的進行,而不是只能以一般字詞來做為取代的內容。
(下面還會詳細說明。
)()依照順序,代碼分別是\1、\2、\3、\4…例如在「[逍遙](之(蜩|學鳩)笑)」的例子裏。
「\1」是代表最外面括號裏的東西,也就是「之(蜩|學鳩)笑」而「\2」代表的就是裏面的括號內的東西,也就是「蜩|學鳩」。
所以如果我們「[逍遙](之(蜩|學鳩)笑)」改寫成「[逍遙](之(蜩|學鳩)笑)\2」,就會找出:1)「逍之蜩笑蜩」;2)「遙之蜩笑蜩」;3)「逍之學鳩笑蜩」;4)「遙之學鳩笑蜩」;5)「逍之蜩笑學鳩」;6)「遙之蜩笑學鳩」;7)「逍之學鳩笑學鳩」;8)「遙之學鳩笑學鳩」。
================以下尚未編輯:現在讓我們打開一個檔案字元描述\共計12個)、或一個向後參照(backreferences)、或一個八進位轉義符。
例如,「n」符合字元「n」。
「\n」符合一個換行符。
序列「\\」符合「\」而「\(」則符合「(」。
^符合輸入字串的開始位置。
如果設定了RegExp物件的Multiline屬性,^也符合「\n」或「\r」之後的位置。
$符合輸入字串的結束位置。
如果設定了RegExp物件的Multiline屬性,$也符合「\n」或「\r」之前的位置。
*符合前面的子運算式零次或多次。
例如,zo*能符合「z」、「zo」以及「zoo」。
*等價於{0,}。
+符合前面的子運算式一次或多次。
例如,「zo+」能符合「zo」以及「zoo」,但不能符合「z」。
+等價於{1,}。
?符合前面的子運算式零次或一次。
例如,「do(es)?」可以符合「do」或「does」中的「do」。
?等價於{0,1}。
{n}n是一個非負整數。
符合確定的n次。
例如,「o{2}」不能符合「Bob」中的「o」,但是能符合「food」中的兩個o。
{n,}n是一個非負整數。
至少符合n次。
例如,「o{2,}」不能符合「Bob」中的「o」,但能符合「foooood」中的所有o。
「o{1,}」等價於「o+」。
「o{0,}」則等價於「o*」。
{n,m}m和n均為非負整數,其中n<=m。
最少符合n次且最多符合m次。
例如,「o{1,3}」將符合「fooooood」中的前三個o。
「o{0,1}」等價於「o?」。
請注意在逗號和兩個數之間不能有空格。
?非貪心量化(Non-greedyquantifiers):當該字元緊跟在任何一個其他重複修飾詞(*,+,?,{n},{n,},{n,m})後面時,符合模式是非貪婪的。
非貪婪模式儘可能少的符合所搜尋的字串,而預設的貪婪模式則儘可能多的符合所搜尋的字串。
例如,對於字串「oooo」,「o+?」將符合單個「o」,而「o+」將符合所有「o」。
.符合除「\n」之外的任何單個字元。
要符合包括「\n」在內的任何字元,請使用像「(.|\n)」的模式。
(pattern)符合pattern並取得這一符合的子字串。
該子字串用於向後參照。
所取得的符合可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。
要符合圓括號字元,請使用「\(」或「\)」。
(?:pattern)符合pattern但不取得符合的子字串(shygroups),也就是說這是一個非取得符合,不儲存符合的子字串用於向後參照。
這在使用或字元「(|)」來組合一個模式的各個部分是很有用。
例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的運算式。
(?=pattern)正向肯定預查(lookaheadpositiveassert),在任何符合pattern的字串開始處符合尋找字串。
這是一個非取得符合,也就是說,該符合不需要取得供以後使用。
例如,「Windows(?=95|98|NT|2000)」能符合「Windows2000」中的「Windows」,但不能符合「Windows3.1」中的「Windows」。
預查不消耗字元,也就是說,在一個符合發生後,在最後一次符合之後立即開始下一次符合的搜尋,而不是從包含預查的字元之後開始。
(?!pattern)正向否定預查(negativeassert),在任何不符合pattern的字串開始處符合尋找字串。
這是一個非取得符合,也就是說,該符合不需要取得供以後使用。
例如「Windows(?!95|98|NT|2000)」能符合「Windows3.1」中的「Windows」,但不能符合「Windows2000」中的「Windows」。
預查不消耗字元,也就是說,在一個符合發生後,在最後一次符合之後立即開始下一次符合的搜尋,而不是從包含預查的字元之後開始(?<=pattern)反向(lookbehind)肯定預查,與正向肯定預查類似,只是方向相反。
例如,「(?<=95|98|NT|2000)Windows」能符合「2000Windows」中的「Windows」,但不能符合「3.1Windows」中的「Windows」。
(?
延伸文章資訊
- 1祝平次的教學網站- Regular Expression (正[則規]表[達示]式)
Regular Expression (正[則規]表[達示]式) ... 請注意RegEx中用的符號都是半型。 ... 如果設定了RegExp物件的Multiline屬性,^也符合「\n」或「\...
- 2正規表達式- JavaScript - MDN Web Docs
Regular expressions are used with the RegExp methods test and exec and with the String methods ma...
- 3簡易Regular Expression 入門指南 - Huli
前陣子看到了這個寫得很棒又很漂亮的教學:Regular Expressions for Regular Folk,再加上之前一直沒有在自己的課程裡面教到Reglar Expresioon,可是 ...
- 4Regular Expression (regex),要成為GA專家一定要懂的正規 ...
學會使用正規表示式,或稱規則運算式(Regular Expression, RegEx) 就很重要了!常見的規則運算式符號 ... Google Analytics (GA) 實用教學,快速掌握...
- 5正規表示式Regular Expression - 陳鍾誠的網站
匹配輸入字串的開始位置。如果設置了RegExp物件的Multiline屬性,^也匹配“\n”或“\r”之後的位置。 $, 匹配 ...