長期以來,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]/
方括號符號還可以指定字符的范圍,讓你不必列舉一整串連續的數字或字母
新聞熱點
疑難解答