[PERL] 04-基本比對@新精讚

文章推薦指數: 80 %
投票人數:10人

字串比對是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=; chomp($line); if($line=~/^\d+$/){print"全是數字\n";} else{print"不是全數字\n";} 第2~3行代表等待使用者輸入的字串,會包含換行,因此用chomp來移除行尾的換行 第4行$line=~/^\d+$/這是PERL的比對寫法,注意並沒有用到雙引號或單引號,拆解後:  $line被比對的變數  =~符合比對運算子  /樣式/預設左右兩個斜線作為樣式的邊界,邊界符號是可以修改的,我在進階比對中會再說明,而樣式就是正規表達式的Pattern    ^從字串的最前面開始判斷    \d代表1個數字0~9    +代表出現1個以上    $判斷到字串的最後面  意思就是從字串的第1個字元比到最後一個字元,都必須是數字組成。

執行 $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=; chomp($line); if($line=~/^[^_\d][\da-z_]+$/){print"符合\n";} else{print"不符合\n";}  樣式內容^[^_\d][\da-z_]+$部分說明如下:    ^從字串的最前面開始判斷      [^_\d]在清單中的第一個字元若出現'^'表示「相反」的意思,在清單中的字元都不能出現。

所以意思是第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 判斷使用者是不是輸入數字判斷是否為數值只接受小寫的英文、數字和底線_ 到最頂端 到中間 到最底端



請為這篇文章評分?