perl原始檔
regex.pl:
#! /usr/bin/perl -w
$argv="-o=eng this is good -op=usr";
$argv=~ /^-(o|op)=(\s*)/;
print "first:$1 second:$2\n";
執行結果:
first:o second:eng
1.()
()的作用是什麼? 可以將括號內的字元儲存在標量$1,$2,...中,便於後續引用,在這裡$1="o",$2="eng"。
2. \s
為何用\s*而不是.*? 因為.可以匹配任意字元,而\s是匹配非空白字元,如果使用了.*,那麼輸出結果中: $2="eng this is good -op=usr",將會一直匹配到末尾。
3. ^
^的作用是什麼?^用於從行首開始匹配,我們看到-(o|op)=(\s*)實際上可以匹配到兩個字串,"-o=eng"和"-op=usr",乙個在前,乙個在後,使用^就可以匹配到前乙個字串。
4. $
如何匹配到後乙個字串"-op=usr"呢? 這就要用到$了,$表示從行尾開始匹配,我們將匹配語句改寫為如下:
$argv=~ /-(o|op)=(\s*)$/;
執行結果:
first:op second:usr
5. /i
如果想忽略大小寫,怎麼做呢?那就要用到i了,我們將字串和匹配語句都修改如下:
$argv="-op=eng this is good -op=usr"; //將開頭的op改為大寫
$argv=~ /^-(o|op)=(\s*)/i; //後面新增/i
執行結果:
first:op second:eng
雖然(o|op)是小寫,但是在末尾新增了/i,所以大寫的"op"同樣可以匹配到。
6.\如果源字串內的字元有特殊字元,比如源字元如下:
$argv=".op=eng this is good .op=usr"; //把"-"替換成了"."
那麼為了匹配"."在匹配語句中就要用到"\."來做轉義,否則"."就變成了匹配任意字元的意思了。
$argv=~ /^\.(o|op)=(\s*)/i;
執行結果:
first:op second:eng
7.(?:)
從1.中我們知道()可以保留匹配結果,如果我們不想保留結果呢?
$argv=".op=eng this is good .op=usr";
$argv=~ /^\.(?:o|op)=(\s*)/i; //將(o|op)改為(?:o|op),只做匹配,不儲存結果
執行結果:
first:eng second:
可以看到,$1="eng",而$2為空了。
8. 可以用來精確查詢,我們將源輸入字串修改如下:
$argv=".op=eng,this,is,good,op=usr"; //在詞與詞之間用,連線
$argv=~ /^\.(o|op)=(.*,)/i; // 使用.*,來匹配
print "\$1:$1 \$2:$2\n";
執行結果:
$1:op $2:eng,this,is,good,
說明".*,"來做最大限度的匹配,匹配到最後乙個","。
為了能夠只匹配到"eng,",使用,將匹配語句修改如下:
$argv=~ /^\.(o|op)=([^,]*),/i; // [^,]表示非逗號字元
執行結果:
$1:op $2:eng
9.(?=)
我們將源輸入字串修改如下:
$argv=".op=eng,this, windows2000 is,good,op=usr";
如果想匹配到"windows"字串,它的字尾是"2000",如何做呢?
匹配語句如下:
$argv=~ /(\b\w+(?=2000\b))/i;
\b:表示單詞與空格的邊界
\w:表示包括下劃線的任何單詞字元。等價於「[a-za-z0-9_]」
(?=2000):表示匹配字尾為"2000"的前面的字串,而且不儲存結果
\b\w+(?=2000\b):表示匹配前後有空格的字尾是"2000"的並且在"2000"之前的字串,即"windows"
(\b\w+(?=2000\b)):為了把結果儲存下來,外邊再加乙個括號,這是使用1.中介紹的規則。
列印結果:
$1:windows
如果將(?=)改為7.中介紹的(?:),那麼匹配語句變成:
$argv=~ /(\b\w+(?:2000\b))/i;
列印結果變成:
$1:windows2000
如果將(?=)改為1.中介紹的(),那麼匹配語句變成:
$argv=~ /(\b\w+(2000\b))/i;
列印結果變成:
$1:windows2000 $2:2000
因此,()、(?=)、(?:) 是完全不一樣的結果。
正規表示式例項
正規表示式例項 1.驗證數字 只能輸入1個數字 表示式 d 描述 匹配乙個數字 匹配的例子 0,1,2,3 不匹配的例子 2.只能輸入n個數字 表示式 d 例如 d 描述 匹配8個數字 匹配的例子 12345678,22223334,12344321 不匹配的例子 3.只能輸入至少n個數字 表示式 ...
正規表示式例項
正規表示式語法 字元匹配 正規表示式 china 匹配 chinaabc 句點符號 正規表示式 t.n 匹配 tan,tbn,tcn,t n,t n等 方括號符號 方括號只有裡面指定的字元才參與匹配,也就是說,正規表示式 t aeio n 只匹配 tan ten tin 和 ton 但 toon 不...
正規表示式例項
正規表示式例項 1.驗證數字 只能輸入1個數字 表示式 d 描述 匹配乙個數字 匹配的例子 0,1,2,3 不匹配的例子 2.只能輸入n個數字 表示式 d 例如 d 描述 匹配8個數字 匹配的例子 12345678,22223334,12344321 不匹配的例子 3.只能輸入至少n個數字 表示式 ...