使用Perl常規運算式進行匹配

來源:互聯網
上載者:User

長期以來,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)/

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.