主頁spacer>軟體支援>spacer免費的正則表達式測試工具

spacer

輕鬆學習和測試正則表達式

Mergemill Pro 的正則表達式實驗室是一個免費的測試工具,讓你學習創建和測試功能強大的正則表達式

Share via Email Email

print friendly Print / PDF

Share on Facebook Facebook

Share on Twitter Twitter

space
正則表達式,或 regex,是一個由普通字符和元字符組成的文本模式,共同描述在查找和替換文本時要匹配的字符串。用正則表達式,你可快速查找特定的字符或位置。

本簡介是 Mergemill Pro 之內 Xojo 正則表達式的特定實現。然而,以下大多數的思路和語法也應適用於其他正則表達式的實現。

為使你可以輕鬆地測試和調試正則表達式,Mergemill Pro 提供了「正則表達式實驗室」。如果你不熟悉正則表達式,最好的開始是按照這個介紹,嘗試在「正則表達式實驗室」創建或測試他人提供的正則表達式。因你可以沒有任何限制地在 Mergemill Pro 試用版內使用正則表達式實驗室,這基本上使此軟體成為免費的正則表達式測試工具。


基本正則表達式模式

模式

說明

abc

按序匹配所有的 a,b 和 c。例如,正則表達式 "123" 匹配 "01123345"。

a|b|c

匹配 a,b,或 c。例如,正則表達式 "1|2|3" 匹配 "01123345"。

[a-z0-9]

匹配方括號中的任何單個字符。例子:[aeiou] 匹配任何一個元音。[a-zA-Z0-9] 匹配任何字母數字字符。[a-e] 匹配任何 a 至 e 範圍內的字符。如要匹配一個 "﹣",可將它放置於字符集的開頭或結尾。例如,[a-c-] 會匹配任何 a 至 c 範圍內的字符或 "﹣" 號。其他有用的模式包括:"[[]" 可匹配 "["。"[]]" 匹配 "]"。

[^a-z0-9]

匹配不在集內的任何單個字符。例如,[^aeiou] 匹配元音以外的任何字符。如要匹配脫字符,可將它放置於方括號內首個位置以外的任何地方。例如,[a-e^] 會匹配任何 a 至 e 範圍內的字符或脫字符。

\d

匹配一個數字,作用如 [0-9]。

\D

匹配一個非數字,作用如 [^0-9]。

\w

匹配一個字母或數字字符,作用如 [a-zA-Z0-9_]。

\W

匹配一個非字母及非數字字符,作用如 [^a-zA-Z0-9_]。

\s

匹配一個空白字符(空格,製表符,回車,換行,換頁)。

\S

匹配一個非空白字符。請注意:[\D\S] 與 [^\d\s] 作用並不一樣。事實上,[\D\S] 匹配任何東西。

\n

匹配一個換行符。

\r

匹配一個回車符。

\t

匹配一個製表符。

\f

匹配一個換頁符。

\0

匹配一個空字符。

\000

也匹配一個空字符。這是 \nnn 的一個特定情況。

\nnn

匹配 ASCII 字符的八進制值 nnn。例如,"\15" 與 "\r" 的作用是相同的。

\xnn

匹配 ASCII 字符的十六進制值 nn。所以,另一種方式去匹配回車符是使用 \xD。

\cX

匹配一個 ASCII 控制字符。反斜線後首個字母必須是一個小寫的 c。第二個字母是大寫字母 A 到 Z,表明 Control+A 到 Control+Z。與此模式有相同作用的是 \x01 到 \x1A。

\元字符

匹配一個元字符,例如 \., \\, 及 \|。

. (點)

除換行符以外,匹配任何字符。如果單獨使用「點」,你會先匹配目標字符串的第一個字符,如再重複查找,便會匹配每一個後續的字符,直到遇到一個換行符。例如,"5.." 匹配 "0123456789"。「點」在 Unix 即為 [^\n],在 Windows 是 [^\r\n],在 Mac OS 是 [^\r]。如果可以的話不要使用點,如果你更清楚指明要匹配的字符串,你的正則表達式是更有效的。優化一個正則表達式是非常重要的,尤其是它是被多次使用在大量的數據中。


字符集內的元字符

在字符集內,除右括號 "]",反斜線 "\",脫字符 "^",和 連字符 "-" 外,其他的元字符可以普通字符看待,不需要通過反斜線轉義。例如要匹配 "*" 或 "+",只需使用 [+*]。但要於沒有任何特殊含義的字符集內包括一個反斜線字符,你必須添加另一個反斜線將其轉義。所以 [\\x] 匹配一個反斜線或 x。右括號 "]",脫字符 "^" 和連字符 "-" 可以反斜線轉義,或將其放置在字符集內一個不涉及其特殊意義位置。


錨(位置匹配)

字符

說明

^

匹配行或字符串的開頭。例如,"^名稱" 匹配以 "名稱" 開頭的行。

$

匹配行或字符串的結尾。例如,".$" 匹配在一行的最後一個字符。

\b

匹配一個單詞邊界。例如,"\bword\b" 查找整個詞。

\B

匹配非單詞邊界。它匹配 \b 不匹配的。


重複

字符

說明

x?

將 x 重複零次或一次。也就是說,在被匹配的字符串內 x 是可選的。例如,"12?3" 同時匹配 "0123456789" 和 "013456789"。

x*

在被匹配的字符串內,x 可重複零次或多次。例如,"12*" 匹配 "01222223456789"。

x+

在被匹配的字符串內,x 可重複一次或多次。例如,[0-9]+ 查找字符串內一個或多個連續的數字,如 "32" 中的 "Win32"。

x{m,n}

在被匹配的字符串內,x 可重複 m 至 n 次。

x{n}

在被匹配的字符串內,x 重複 n 次。

x{n,}

在被匹配的字符串內,x 重複最少 n 次。


「貪婪」選項

Mergemill Pro 的正則表達式重複操作符並不「貪婪」。貪婪操作符重複前面的符記,直至匹配失敗。因此,在正則表達式 "<.+>" 的 "+" 若是貪婪的,它會由最左位置的 "<" 開始,一直匹配所有字符,直至文本最後一個 ">"。 如果你想找到一個 HTML 文檔中的第一個標籤,這是沒有幫助的。

Mergemill Pro 可讓你通過一個複選框控制正則表達式的貪婪屬性。你也可在 "*" 或 "+" 後放置一個 "?",以扭轉「貪婪」設定。因此,當應用到 "aaaa" 時,"a+?" 傳回 "a" 而 "a+" 則傳回 "aaaa"。


分組和反向引用

你可將一個正則表達式的一部分放在括號內,以作一組字符處理。這讓你可以將一個正則表達式的重複操作符應用於整組字符。例如,"Nov(ember)?" 會同時匹配 "Nov" 及 "November"。

圓括號除了將正則表達式的一部分指定為一組,還創建了一個「反向引用」。反向引用儲存 regex 括號內字符串匹配的文本部分。然後,你可經 \1, \2, 等引用第一組匹配、第二組匹配等。例如,"\b(\w+)\s+\1\b" 會發現如 "the the" 等的雙字。如果你想匹配任何日期,可使用 "(\d+)\s(B.C.|A.D.|BC|AD)",則 \1 只指年數而 \2 將包含字母。

請注意:

  1. 反向引用僅儲存最後一個匹配,所以 "([abc]+)" 捕獲 "cab",而 "([abc])+" 只獲 "b"。
  2. 圓括號和反向引用如 \1 於方括號內 [ ] 內沒有特殊的含義。
  3. 在查找模式的反向引用必須使用反斜線,如 \1,\2,等。在替換模式,你可以使用 \1 或 $1,等等。


替代模式

模式

說明

$'

替換匹配文本後的整個目標字符串。

$&

與 \0 或 $0 一樣,它包含整個匹配的字符串。例如,若 "\d\d\d\d\sB\.C\." 捕獲 "1541 B.C.",則替換模式 "the year $&" 便傳回結果 "the year 1541 B.C."。

$0-$50

與 \0 至 \50 一樣。如沒有相應編號的子表達式,結果便會是空白,否則它們會含有通過查找模式中括號內容最後匹配的結果。

\xnn

替換成 nn 十六進制表示的字符。

\nnn

替換成 nnn 八進制表示的字符。

\cX

替換成控制-X 字符。


擴展機制

模式

說明

(?#text)

使用此模式插入註釋。

(?:regex)

這個分組不會創建反向引用,因此被調用時會傳回空白。

(?=regex)

這是一個零寬度正預測先行斷言。例如,\w+(?=\t) 匹配一個製表符之前的一個字,而不包括該製表符在 $& 之內。

(?!regex)

這是一個零寬度負預測先行斷言。例如,foo(?!bar) 匹配任何不在 "bar" 之前的 "foo"。

(?<=regex)

這是一個零寬度正回顧後發斷言。例如,(?<=\t)\w+ 匹配一個製表符之後的一個字,而不包括該製表符在 $& 之內。它僅適用於固定寬度的回顧後發正則表達式。

(?<!regex)

這是一個零寬度負回顧後發斷言。它僅適用於固定寬度的回顧後發正則表達式。例如,"\b\w+(?<!s)\b" 匹配一個不以 "s" 完結的字。如不使用回顧後發,同樣效果的正則表達式便是 \b\w*[^s\W]\b。

請注意:

  1. 環視是零寬度,即只要條件得到滿足,正則表達式引擎便會忘記環視內的一切。因此,它不創建反向引用,並且不包括在反向引用編號的計數。
  2. 預測先行可使用任何有效的正則表達式,如 (?=regex) 或 (?=(regex))。若它包含了第二個捕獲括號如 (?=(regex)),反向引用將被儲存。例如:"(?=(\d+))\w+\1" 不匹配 123x12,但將匹配 456x56 內的 56x56。


Mergemill Pro 的正則表達式選項

「單行」忽略內部的換行符以便匹配 "^" 和 "$"。
「大小寫敏感」指定在匹配一個字符串時是否必須考慮到大小寫。
「小數點全匹配」設定點匹配一切,包括通常不匹配的換行符。

spacer

返回頁首

軟體功能spacer::spacer下載專區spacer::spacer購買spacer::spacer軟體支援spacer::spacer視頻教程spacer::spacer標籤指南spacer::spacer網站導覽


版權所有 · 不得轉載 © 2001-2017 Cross Culture Ltd.