| 導購 | 订阅 | 在线投稿
分享
 
 
 

使用Perl常規表達式進行匹配

2008-12-22 08:08:04  編輯來源:互聯網  简体版  手機版  移動版  評論  字體: ||

長期以來,Perl以其對常規表達式的固有支持,一直是非常流行的文本處理工具。在這篇入門性文章中,我們將帶領你簡單了解如何在你自己的程序中使用常規表達式,實現更加強大的文本搜索和替代功能。

我們首先了解最簡單的常規表達式:匹配。如果在字符串中找到相匹配的模式,匹配操作就返回真值。因此下面的表達式:

$string =~ m/text/

只有在變量「$string」中的字符串包含子字符串「text」時才返回真值。這是最基本的常規表達式,它對每個字符進行逐字匹配。當然,這只是對常規表達式作用的一個嘗試。以需要查找以「ext」結尾的四個字母的單詞爲例。爲達到這個目的,我們使用一個特殊的字符「.」,常規表達式中的句號告訴Perl匹配其中的任何單獨的字符。因此下面這個表達式:

$string =~ m/.ext/

將與單詞「text」和「next」匹配。

不過,這個表達式並非完美,因爲它與包含「ext」的更長單詞的一部分相匹配,如「dextrous」和「flextime」。我們可以使用錨字符來限制匹配的位置。「^」字符匹配字符串的開頭,因此:

$string =~ m/^.ext/

與「dextrous」匹配,但不與「context」匹配。

同樣,「$」字符匹配字符串的結尾:

$string =~ m/.ext$/

與「context」匹配,但不與「dextrous」匹配。

如果你只希望匹配以「ext」結尾的四個字母的字符串,那麽你可以組合使用上面的兩個表達式,像這樣:

$string =~ m/^.ext$/

現在,如果你需要匹配一組給定的字符,而不是句號位置的任何字符,那該怎麽辦呢?常規表達式通過使用方括號提供一個方法。以下面的表達式爲例:

$string =~ m/^[tT]ext$/

這個表達式只與單詞「text」和「Text」匹配。一對方括號將轉換其中的任何單個字符。這個功能相當強大,例如:

$string =~ m/[aeiouAEIOU]/

如果$string變量中含有元音,則上面的例子返回真值。

如果括號中的第一個字符是「^」,這時它就不是一個錨字符,而是執行「非」操作,匹配不在括號內的任意字符,因此如果$string變量中只包含輔音或標點符號,可以對上面的例子進行調整,使它返回真值:

$string =~ m/[^aeiouAEIOU]/

方括號符號還可以指定字符的範圍,讓你不必列舉一整串連續的數字或字母,例如,下面的例子匹配任何小寫字母:

$string =~ m/[a-z]/

到現在爲止,我們每次都是處理字符串中的一個字符,但許多情況下我們需要處理更加複雜的問題。我們使用「|」或分段操作達到這個目的。假設我們希望檢查$string變量中是否含有「next」或「previous」,我們可以使用下面的表達式:

$string =~ m/next|previous/

如果我們希望在這個表達式中使用錨字符,那麽我們需要將選項組合起來,就像在算術中使用圓括號那樣。因此,如果我們希望只匹配字符串開頭部分的「next」或「previous」,可以這樣寫表達式:

$string =~ m/^(next|previous)/

長期以來,Perl以其對常規表達式的固有支持,一直是非常流行的文本處理工具。在這篇入門性文章中,我們將帶領你簡單了解如何在你自己的程序中使用常規表達式,實現更加強大的文本搜索和替代功能。 我們首先了解最簡單的常規表達式:匹配。如果在字符串中找到相匹配的模式,匹配操作就返回真值。因此下面的表達式: $string =~ m/text/ 只有在變量「$string」中的字符串包含子字符串「text」時才返回真值。這是最基本的常規表達式,它對每個字符進行逐字匹配。當然,這只是對常規表達式作用的一個嘗試。以需要查找以「ext」結尾的四個字母的單詞爲例。爲達到這個目的,我們使用一個特殊的字符「.」,常規表達式中的句號告訴Perl匹配其中的任何單獨的字符。因此下面這個表達式: $string =~ m/.ext/ 將與單詞「text」和「next」匹配。 不過,這個表達式並非完美,因爲它與包含「ext」的更長單詞的一部分相匹配,如「dextrous」和「flextime」。我們可以使用錨字符來限制匹配的位置。「^」字符匹配字符串的開頭,因此: $string =~ m/^.ext/ 與「dextrous」匹配,但不與「context」匹配。 同樣,「$」字符匹配字符串的結尾: $string =~ m/.ext$/ 與「context」匹配,但不與「dextrous」匹配。 如果你只希望匹配以「ext」結尾的四個字母的字符串,那麽你可以組合使用上面的兩個表達式,像這樣: $string =~ m/^.ext$/ 現在,如果你需要匹配一組給定的字符,而不是句號位置的任何字符,那該怎麽辦呢?常規表達式通過使用方括號提供一個方法。以下面的表達式爲例: $string =~ m/^[tT]ext$/ 這個表達式只與單詞「text」和「Text」匹配。一對方括號將轉換其中的任何單個字符。這個功能相當強大,例如: $string =~ m/[aeiouAEIOU]/ 如果$string變量中含有元音,則上面的例子返回真值。 如果括號中的第一個字符是「^」,這時它就不是一個錨字符,而是執行「非」操作,匹配不在括號內的任意字符,因此如果$string變量中只包含輔音或標點符號,可以對上面的例子進行調整,使它返回真值: $string =~ m/[^aeiouAEIOU]/ 方括號符號還可以指定字符的範圍,讓你不必列舉一整串連續的數字或字母,例如,下面的例子匹配任何小寫字母: $string =~ m/[a-z]/ 到現在爲止,我們每次都是處理字符串中的一個字符,但許多情況下我們需要處理更加複雜的問題。我們使用「|」或分段操作達到這個目的。假設我們希望檢查$string變量中是否含有「next」或「previous」,我們可以使用下面的表達式: $string =~ m/next|previous/ 如果我們希望在這個表達式中使用錨字符,那麽我們需要將選項組合起來,就像在算術中使用圓括號那樣。因此,如果我們希望只匹配字符串開頭部分的「next」或「previous」,可以這樣寫表達式: $string =~ m/^(next|previous)/
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有