正規表示式例項 1

2021-06-09 21:01:51 字數 2476 閱讀 3702

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個數字 表示式 ...