Regex簡介(微軟)--12.定位器

來源:互聯網
上載者:User
微軟|正則 定位器

到現在為止,所看到的樣本都只考慮尋找任何地方出現的章區段標頭。出現的任何一個字串 'Chapter' 後跟一個空格和一個數字可能是一個真正的章區段標頭,也可能是對其他章節的交叉引用。由於真正的章區段標頭總是出現在一行的開始,因此需要設計一個方法只尋找標題而不尋找交叉引用。

定位器提供了這個功能。定位器可以將一個Regex固定在一行的開始或結束。也可以建立只在單詞內或只在單詞的開始或結尾處出現的Regex。下表包含了Regex及其含義的列表:

字元 描述

^ 匹配輸入字串的開始位置。如果設定了RegExp對象的 Multiline 屬性,
^ 也匹配 '\n' 或 '\r' 之後的位置。

$ 匹配輸入字串的結束位置。如果設定了RegExp對象的 Multiline 屬性,
$ 也匹配 '\n' 或 '\r' 之前的位置。

\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。

\B 匹配非單詞邊界。


不能對定位器使用限定符。因為在一個分行符號或者單詞邊界的前面或後面不會有連續多個位置,因此諸如 '^*' 的運算式是不允許的。

要匹配一行文字開始位置的文字,請在Regex的開始處使用 '^' 字元。不要把 '^' 的這個文法與其在括號運算式中的文法弄混。它們的文法根本不同。

要匹配一行文字結束位置的文字,請在Regex的結束處使用 '$' 字元。

要在尋找章區段標頭時使用定位器,下面的 Visual Basic Scripting Edition Regex將匹配位於一行的開始處最多有兩個數位章區段標頭:

/^Chapter [1-9][0-9]{0,1}/

VBScript 中相同功能的Regex如下:

"^Chapter [1-9][0-9]{0,1}"

一個真正的章區段標頭不僅出現在一行的開始,而且這一行中也僅有這一個內容,因此,它必然也位於一行的結束。下面的運算式確保所指定的匹配只匹配章節而不會匹配交叉引用。它是通過建立一個只匹配一行文字的開始和結束位置的Regex來實現的。

/^Chapter [1-9][0-9]{0,1}$/

對 VBScript 則使用:

"^Chapter [1-9][0-9]{0,1}$"

匹配單詞邊界有少許不同,但卻給Regex增加了一個非常重要的功能。單詞邊界就是單詞和空格之間的位置。非單詞邊界就是其他任何位置。下面的 Visual Basic Scripting Edition 運算式將匹配單詞 'Chapter' 的前三個字元,因為它們出現在單詞邊界後:

/\bCha/

對 VBScript 為:

"\bCha"

這裡 '\b' 操作符的位置很關鍵。如果它位於要匹配的字串的開始,則將尋找位於單詞開頭處的匹配;如果它位於改字串的末尾,則尋找位於單詞結束處的匹配。例如,下面的運算式將匹配單詞 'Chapter' 中的 'ter',因為它出現在單詞邊界之前:

/ter\b/

以及

"ter\b"

下面的運算式將匹配 'apt',因為它位於 'Chapter' 中間,但不會匹配 'aptitude' 中的'apt':

/\Bapt/

以及

"\Bapt"

這是因為在單詞 'Chapter' 中 'apt' 出現在非單詞邊界位置,而在單詞 'aptitude' 中位於單詞邊界位置。非單詞邊界操作符的位置不重要,因為匹配與一個單詞的開頭或結尾無關。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。