[PERL] 04-基本比對@新精讚
文章推薦指數: 80 %
字串比對是PERL最大的功能和利器,它有一組獨特的運算子:. =~ 比對符合 !~ 比對不符合. 在學習比對時,對於正規表達式Regular Expression得多多著墨 ...
現在日期2022/10/23星期日
Togglenavigation
現在日期2022/10/23星期日
最新文章[札記]2022.10~12月札記
最新消息開始發表有用的蚊蟑和黴體
數位休閒動漫影音遊戲愉樂網路和服務APACHEMYSQL/Mariadb電腦網路資訊網路協定/設定作業系統WindowsCentosLINUXFreebsdMACIOSunix-like應用其他OS前端程設HTML/CSSJquery/JSFlash/繪圖後端程設PHPopenCV+PythonJAVAPERLC#作者廢言作者碎碎念作者吱吱叫作者喃喃語維修記錄經濟學視野
主題
標準
時間線
更多發現
[無邊框]
精讚新精讚首頁
後端程設PERL
[PERL]04-基本比對
7476
[PERL]04-基本比對
“perl的正規表達示基本比對„
分享此文連結//n.sfs.tw/11660
分享連結[PERL]04-基本比對@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-11-2615:19:47最後編修
2017-08-2011:07:13By張○○
自動目錄
判斷使用者是不是輸入數字判斷是否為數值只接受小寫的英文、數字和底線_
字串比對是PERL最大的功能和利器,它有一組獨特的運算子:
=~比對符合
!~比對不符合
在學習比對時,對於正規表達式RegularExpression得多多著墨才行,不然寫不出好的比對樣式(Pattern),此篇舉三個基本比對的範例。
先看第一個範例:
判斷使用者是不是輸入數字
範例
print"請輸入數字\n";
$line=
執行
$perl04.pl
請輸入數字
123456
全是數字
$perl04.pl
請輸入數字
123anc456
不是全數字
$perl04.pl
請輸入數字
-456
不是全數字
$perl04.pl
請輸入數字
123.456
不是全數字
這樣子輸入的字串只要不是全部由0-9所組成,就不符合,但也可以發現,負數和浮點數也不符合,如果要接受所有的數值(正、負、小數)該怎麼改?
判斷是否為數值
上一個範例中的第4,5兩行換成這樣,就能符合我們的需要:
if($line=~/^[+\-]?[\d.]+$/){print"全是數值\n";}
else{print"非數值\n";}
樣式內容^[+\-]?[\d.]+$部分說明如下:
^從字串的最前面開始判斷
[]中刮號裡面是放字元的清單,意思就是只要出現清單中的任一個字元即可
[+\-]表示清單中有一個'+'和一個'-',由於'-'這符號在清單中是「連續」的意思,所以加上一個反斜線'\'指定它為負號'-'
?問號的作用是他前面的字元可有可無,稱為變換字元
[\d.]代表數字和小數點都能接受
+代表出現1個以上
$判斷到字串的最後面
執行
$perl04.pl
請輸入數字
123456
全是數值
$perl04.pl
請輸入數字
123.456
全是數值
$perl04.pl
請輸入數字
-123.456
全是數值
$perl04.pl
請輸入數字
123abc456
非數值
在某些情況下要使用者輸入帳號,但希望使用者只能輸入小寫的英文、數字和底線_,該怎麼寫。
事實上,這裡還存在一個大漏洞,就是如果使用者輸入二個以上的小數點時,這就不會是數值,可是在我們的樣式裡是看不到這樣的限制。
只接受小寫的英文、數字和底線_
使用者只能輸入小寫的英文、數字和底線_作為帳號,同時第一個字元不能是底線或數字,該怎麼寫
print"請輸入帳號\n";
$line=
所以意思是第1個字元不能出現數字\d和底線_
[\da-z_]這組清單能接受數字、和小寫a-z、及底線,正如上面提過,清單中的減字號'-'是連續的意思,不能視為一般的減號。
+代表出現1個以上
$判斷到字串的最後面
$perl04.pl
請輸入帳號
_43243
不符合
#perl04.pl
請輸入帳號
12abc
不符合
$perl04.pl
請輸入帳號
abc3134
符合
$perl04.pl
請輸入帳號
abc_13232
符合
理論上很完美,但是這裡面其實有一個很大的漏洞,有看出來嗎?第一個字元不接受數字和底線,其他符號反而能接受了,因此不能這樣寫,在寫正規表達式時,一定要多思考才不會漏洞百出。
修正
if($line=~/^[a-z][\da-z_]+$/){print"符合\n";}
有關於更多比對會再後面再介紹,下二篇先寫運算子...
上一篇03-條件式判斷
回到目錄01-撰寫第一隻PERL程式
下一篇05-運算子#1
END
你可能感興趣的文章
[PERL]簡易檢查網頁記錄檔ip來源統計利用PERL來檢查網頁記錄檔ip來源統計的簡易程式
[PERL]19-模組的安裝和維護模組的安裝和維護
自行撰寫syslogserver建立資訊安全控管中心#3--程式下載和安裝利用PERL將syslog收攏到資料庫的程式,程式下載和安裝
[PERL]11-雜湊的範例Perl的幾個雜湊範例
[PERL]23-多執行緒而多執行緒的程式,可在一次執行程式時間,同時進行多線程的計算,在效率上可獲得即大的提升。
[PERL]取得字串長度使用length來取得字串長度
我有話要說
>>
姓名*
EMAIL*
留言內容*
我是人類*
限制:留言最高字數1000字。
限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。
訪客留言
[無留言]
隨機好文
[CodeIgniter3]資料庫的使用方法整理1/2--Select的使用[CodeIgniter3]資料庫的使用方法整理:Select的使用
[Wildfly10]發佈war檔deploywarfileontowildfly10
[Mysql]資料型態int,float,double,text,char,varchar,blob大小Mysql中資料型態int,float,text,char,varchar,blob大小
踩地雷公式解由數學排列法演算出踩地雷公式解,主要有三種解:唯一解、歸納解、猜測
[HTML5]script的新增屬性defer,asyncscript的新增屬性defer,async
判斷使用者是不是輸入數字判斷是否為數值只接受小寫的英文、數字和底線_
到最頂端
到中間
到最底端
延伸文章資訊
- 1perl字串比較的疑問 - 酷!學園
perl字串比較的疑問. « 回覆#2 於: 2004-08-31 16:29 ». twu2大哥你說的方法我也有試過.... 好比說檔案裡面擷取的字串是(exe) 而我要比對的字串 ...
- 2Perl 模糊字串比對(Approximate Matching)String::Approx 模組
這裡介紹如何使用Perl 的 String::Approx 模組進行模糊字串比對(approximate matching)。 模糊搜尋是實務上常用的搜尋方法,當使用者輸入的關鍵字 ...
- 3Perl 學習手札- 8. 更多關於正規表示式 - Easun.org
- 48.3 比對
表示比對不符合$& 代表最後一次成功比對的字串$` 代表比對到的字串之前半段所有字串$' 代表比對到的字串之後半段 ... if ($my_best_like =~ /Perl/) { prin...
- 5Perl的基本語法
# 不用再指定變數的data type,這樣不是比printf()方便多了嗎? print "Scalar value is $x\n"; # . 是字串加法的運算子,上下這兩行是等效 ...