Show/Hide Toolbars

EmEditor 說明

導航: EmEditor 說明 > 如何... > 搜尋

EmEditor 如何: 規則運算式語法

Scroll 上一頁 首頁 下一頁 其他
EmEditor 首頁 - EmEditor 說明 - 如何 - 搜尋

規則運算式語法

EmEditor 規則運算式語言基于 Perl 規則運算式語法。

文字

所有字元都是文字除了: ".", "*", "?", "+", "(", ")", "{", "}", "[", "]", "^", "$" 和 "\"。這些字元代表文字當之前有一個 "\" 時。一個文字是一個與它自己相符合的字元。例如,搜尋 "\?" 會符合每一個在文檔中的 "?" ,或搜尋 "Hello" 會符合每一個在文檔中的 "Hello" 。

元字元

下清單格包含元字元 (非文字) 的完整清單以及這些元字元在規則運算式中的行為。

\

把下一個字元標記為一個特殊字元,一個文字,或一個向后引用。例如,'n' 與字元 "n" 相符合。而 '\n' 代表一個換行符號。序列 '\\' 代表 "\","\(" 則與 "(" 相符合。

^

符合輸入字串的開始位置。例如,"^e" 表示任何由 "e" 開頭的字串。

$

符合輸入字串的結尾位置。例如,"e$" 表示任何由 "e" 結尾的字串。

*

符合之前的字元或子表達式零次或多次。例如,zo* 會符合 "z" 以及 "zoo"。* 等同于 {0,}。

+

符合之前的字元或子表達式一次或多次。例如,'zo+' 符合 "zo" 以及 "zoo",但不符合 "z"。 + 等同于 {1,}。

?

符合之前的字元或子表達式零次或一次。例如,"do(es)?" 符合 "do" 在  "do" 或 "does" 中。? 等同于 {0,1}。

{n}

n 是一個非負整數。符合確定的 n 次。例如,'o{2}' 不符合 "Bob" 中的 "o",但與 "food" 中的兩個 o 符合。

{n,}

n 是一個非負整數。符合至少 n 次。例如,'o{2,}' 不符合 "Bob" 中的 "o",單符合 "foooood" 中的所有 o。and matches all the o's in "foooood". "o{1,}" 等同于  'o+'。 'o{0,}' 等同與 'o*'。

{n,m}

m 和 n 都要是非負整數,n <= m。符合至少 n 次,最多 m 次。例如,"o{1,3}" 與 "fooooood"中的前三個 o 向符合。 'o{0,1}' 等同于 'o?'。要注意的是您不能在逗號與數字之間加一個空白。

?

當這個字元緊跟著任何其他數量詞 (*, +, ?, {n}, {n,}, {n,m}) 時,符合的模式是非貪婪。一個非貪婪模式盡可能少地與搜尋字串符合,而預設的貪婪模式則盡可能多地與搜尋字串符合。例如,字串 "oooo",'o+?' 符合單一的一個 "o",而w 'o+' 符合所有 'o'。

.

與任何單一字串符合。例如,".e" 符合任何在 "e" 之前的文字,如 "he","we",或 "me"。 在 EmEditor Professional 中,它符合搜尋規則運算式的附近行文字方塊中指定范圍內的換行當規則運算式 "." 符合換行符核取方塊被勾選。

(pattern)

括號有兩個作用: 把一個格式組合到一個子表達式中,以及捕捉生成該符合的格式。例如,表達式 "(ab)*" 符合所有字串 "ababab"。每一個子表達式的符合被捕捉為一個從左到右編號的向后引用 (如下) 。要符合括號字元,用 '\(' 或 '\)'。

\1 - \9

指定一個向后引用 - 一個向后引用是上一個被符合的子表達式的引用。引用的內容是與子表達式相符合的內容,而不是表達式本身。一個向后引用由逸出序列 "\" 加一個 "1" 到 "9" 的數字組成。"\1" 指的是第一個子表達式,"\2" 是第 2 個,以此類推。例如,"(a)\1" 會捕捉 "a" 為第一個向后引用,并符合任何 "aa" 文字。您還可以使用向后引用功能當您在搜尋功能表下選擇取代功能時。用規則運算式來定位一個文字格式,與之相符合的文字能被一個指定的向后引用取代。例如,"(h)(e)" 的表達式會在文字中尋找 "he",把 "\1" 放在取代為文字方塊中會用 "h" 取代 "he", 而如果是 "\2\1" 的話,則會用 "eh" 取代 "he" 。

(?:pattern)

一個與格式相符合,但不捕獲該符合的子表達式,這是一個不能用向后引用來存儲的非捕獲符合。這個表達式通常和 "or" 字元 (|) 組合使用。例如,'industr(?:y|ies) 是一個比 'industry|industries' 更實用的表達式。

(?=pattern)

子表達式執行符合 lookahead 搜尋,尋找任何后面跟著符合的模式的字串。例如,"x(?=abc)" 與 "x"相符合僅當字串后面跟著 "abc" 表達式時。 這是一個不能用向后引用來存儲的非捕獲符合。模式不包含換行。

(?!pattern)

子表達式執行非符合 lookahead 搜尋,尋找任何后面沒有跟著符合的模式的字串。例如,"x(?!abc)" 與 "x" 相符合只有當該字串后面不跟著 "abc" 表達式時。這是一個不能用向后引用來存儲的非捕獲符合。模式不包含換行。

(?<=pattern)

子表達式執行符合 lookbehind 搜尋,尋找任何前面是符合的模式的字串。例如,"(?<=abc)x" 符合一個 "x" 只有當它前面有表達式 "abc"時。這是一個不能用向后引用來存儲的非捕獲符合。模式不包含換行。模式必須是固定長度。

(?<!pattern)

子表達式執行非符合 lookbehind 搜尋,尋找任何前面不是符合模式的字串。例如,"(?<!abc)x" 符合 "x" 只有當它前面不跟著 "abc" 表達式時。這是一個不能用向后引用來存儲的非捕獲符合。模式不包含換行。模式必須是固定長度。

x|y

與 x 或 y 向符合。例如,'z|food' 與 "z" 或 "food" 符合。'(z|f)ood' 與 "zood" 或 "food" 符合。

[xyz]

字元集。符合任何在括號內的字元。例如,'[abc]' 與 "plain" 中的 'a' 相符合。

[^xyz]

負字元集。符合任何不在括號內的字元。例如,[^abc]' 與 "plain" 中的 'p' 相符合。

[a-z]

字元范圍。與任何指定范圍的字元相符合。例如,'[a-z]' 與任何 'a' 到 'z' 的小寫字母相符合。

[^a-z]

負字元范圍。與任何不在指定范圍內的字元相符合。例如,'[a-z]' 與任何不在 'a' 到 'z' 范圍內的字元相符合。

字元類

下面的字元類被用在字元集中,例如 "[:classname:]"。例如,"[[:space:]]" 是所有空白字元的集合。

alnum

任何語言字元及數字: 字母,音節或表意字元。

alpha

任何語言字元: 字母,音節或表意字元。

blank

任何空白字元,空白或 tab。

cntrl

任何控制字元。

digit

任何 0-9 的數字。

graph

任何圖形字元。

lower

任何 a-z 的小寫字元,以及其他小寫字元。

print

任何可列印的字元。

punct

任何標點字元。

space

任何空白字元。

upper

任何 A-Z 的大寫字母,以及其他大寫字元。

xdigit

任何十六進位數字字元,0-9,a-f 還有 A-F。

word

任何單字字元 - 所有字母數字字元以及下劃線。

unicode

任何大于 255 代碼的字元。

單一字元逸出序列

下列逸出序列是單一字元的別名:

0x07

\a

響鈴字元。

0x0C

\f

換頁 (FF)。

0x0A

\n

換行字元。

0x0D

\r

歸位符。

0x09

\t

Tab 字元。

0x0B

\v

垂直 tab。

0x1B

\e

ASCII 逸出序列。

0dd

\0dd

八進位字元代碼,dd 是一個或多個八進位數字。

0xXX

\xXX

一個十六進位字元代碼,XX 是一個或多個十六進位數字 (一個 Unicode 字元) 。

0xXXXX

\x{XXXX}

一個十六進位字元代碼,XXXX 是一個或多個十六進位數字 (一個 Unicode 字元) 。

Z-'@'

\cZ Z-'@'

一個 ASCII 逸出序列控制-Z,其中 Z 是任一 ASCII 字元大于或等于 '@' 的字元代碼。

單字邊界

下列逸出序列與單字的邊界相符合:

\<

符合一個單字的開頭。

\>

符合一個單字的結尾。

\b

符合單字的邊界 (一個單字的開頭或結尾) 。

\B

僅當不在單字邊界處時符合。

字元類的逸出序列

下列逸出序列能被用來表示整個字元類:

\w

任何單字字元 - 所有字母數字字元加下劃線。

\W

\w 的補集 - 尋找任何非單字的字元。

\s

任何空白字元。

\S

\s 的補集。

\d

任何 0-9 的數字。

\D

\d 的補集。

\l

任何 a-z 的小寫字元。

\L

\l 的補集。

\u

任何 A-Z 的大寫字元。

\U

\u 補集。

\C

任何單一字元,等同與 '.'。

\Q

開始引述運算符,任何跟在該符號后面的內容會被作為一個文字字元直到找到 \E 結束引述運算符。

\E

結束引述運算符,終止一個由 \Q 開始的序列。

取代表達式

下清單達式是可用于取代對話方塊以及多檔取代對話方塊中的取代為文字方塊內。

\0

把整個規則運算式作為指定為向后引用。

\1 - \9

指定一個向后引用 - 一個向后引用是上一個被符合的子表達式的引用。引用的內容是與子表達式相符合的內容,而不是表達式本身。一個向后引用由逸出序列 "\" 加一個 "1" 到 "9" 的數字組成。"\1" 指的是第一個子表達式,"\2" 是第 2 個,以此類推。

\n

一個換行符。

\r

多檔取代表示一個歸位符。請參考指定換行

\t

一個 tab。

\L

強制所有后續取代字元要小寫。

\U

強制所有后續取代字元要大寫寫。

\H

強制所有后續取代字元要是半形字元。

\F

強制所有后續取代字元要是全形字元。

\E

關閉之前的 \L,\U\uff0c\F 或 \H。

(?n:true_expression:false_expression)

如果子表達式 N 被符合,那么 true_expression 被評估并被送入到輸出,否則的話,false_expression 會被評估并被送入到輸出。

注意

多檔尋找多檔取代中,歸位符 (\r) 以及換行符 (\n) 必須仔細指明。更多信息,請參考指定換行

為了一些逸出序列能在 EmEditor 中運作,例如 "\l", "\u" 以及它們的補集,必須選擇區分大小寫的選項。

版權聲明

EmEditor 使用 Boost library Regex++ 的規則運算式慣例。

Copyright (c) 1998-2001 Dr John Maddock

請同樣參考

Q. 規則運算式的例子有哪些?

指定換行

Copyright © 2003-2016 by Emurasoft, Inc.