個人常用正規表示式:
s/^\s
+//
s/\s+$//
s/^\s
+|\s+$
//g
/.*/s
這裡/s表示連換行符也匹配,因為.是不匹配換行符的,所以上面的表示式匹配任意字元。下面看第二種方法,perl中的元字元.能匹配所有單個字元,但是不能匹配換行符,如果要匹配的文字含有換行符,那麼.將無法勝任,比如下面的xml檔案。
<response
>
<
code
>
200code
>
<
description
>
success
description
>
response
>
如果想取得response結點中的內容,那麼下面的表示式無法完成工作,因為兩行文字中間有乙個換行符。
<response
>
(.*)
<
\/response
>
那麼如何匹配任意字元呢?可以用下面的正規表示式
[\d\d]
\d表示數字,\d表示非數字,數字加非數字也就是所有字元了。當然還可以使用[\s\s]或者[\w\w]等等,所以上面那個匹配可以寫成
<response
>
([\s\s]*)
<
\/response
>
假設有如下xml檔案,我們想返回所有step之間的文字,這裡即abc和xyz。
<steps
>
<
step
index
='1'
>
abcstep
>
<
step
index
='2'
>
xyzstep
>
step
>
那麼可以使用下面的方法
my@result
=$text
=~/<
step
.*?>(.*
)<\/
step
>/
g ;
解釋一下,匹配abc左邊的內容,為防止*匹配到本行末尾,我們使用其懶惰型版本*?,(.*)匹配abc,這裡使 用了分組,這樣結果才能存放到result陣列裡面,<\/step>匹配閉合的step,由於/是模式的分隔符,所以需要轉義。
能,因為模式串/(fred)*/表示目標串中有0個或者任意個fred,而hello, world含有0個fred,所以符合要求。
/^\d+$/
這個很簡單,沒什麼說的,注意這裡匹配的是單獨的數字串,也就是乙個數字獨立作為一行出現。而不是出現在其他字串中的數字。所以要加行的起始符和結束符。如果想要在乙個長字串中找出數字,那麼可以使用\b作為單詞的邊界符。可以使用下面的正規表示式
/\b\d+\b/
/^0[0-7]+$/
八進位制數是以0開頭的,還要注意八進位制數中基數最大是7,寫成/^0\d+$/是不對的
/^0[xx][\da-fa-f]+$/
十六進製制數以0x或0x開頭,字元可以是0-9或a-f(a-f)。注意這裡沒有處理字母大小寫混合的情況,所以0x12abcd也是合法的十六進製制數。如果要保持大小寫一致的話,可以使用下面的表示式。
/^0x[\da-f]+$|^0x[\da-f]+$/將上面的十進位制,八進位制和十六進製制聯合起來即可。
/^\d+$|^0[0-7]+$|^0[xx][\da-fa-f]+$/
注意不能將^和$提取出來作為公共部分,下面這樣寫是不對的
/^\d+|0[0-7]+|0[xx][\da-fa-f]+$/
因為|會將它前面所有字元作為乙個模式,所以^\d+成了乙個獨立的模式,這樣導致只會匹配字串開頭乙個十進位制數,同樣也只會匹配結尾的乙個十六進製制數。這顯然是不對的。如果非要這麼些,可以將模式加上小括弧作為乙個分組,像下面這樣。這樣寫貌似也不對,需要繼續研究。
/^(\d+)|(0[0-7]+)|(0[xx][\da-fa-f]+)$/
Perl 常用正規表示式整理
前言 正規表示式,又稱規則表示式。英語 regular expression,在程式碼中常簡寫為regex regexp或re 電腦科學的乙個概念。正則表通常被用來檢索 替換那些符合某個模式 規則 的文字。許多程式語言都支援利用正規表示式進行字串操作。例如,在perl中就內建了乙個功能強大的正規表示...
Perl 正規表示式
正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...
Perl正規表示式
元字元 元字元的含義是具有特殊含義的字元,即為元字元,元字元包括 點號能夠匹配所有的單字元,但是換行字元除外 n 簡易量詞 記載匹配正規表示式的時候有些需要重複的字元或者字串,我們在表示這種重複的形式的時候,即是量詞,我們知道的量詞有 表示至少重複一次,表示重複一次或者一次 以上,指的是重複一次或者...