Regular Expressions 例子 [[ 變數名稱 ]] 變數名稱通常只包含英文字母、數字和底線, 而第一個字元不可以是數字,長度不可超過某個數值, 假設最長只可以是32個字元。 #### $st = "ab123_"; $pattern = '[a-zA-Z_][a-zA-Z_0-9]{0,31}'; if ($st =~ /^$pattern$/) { print "Valid format"; } else { print "Invalid format"; } #### [[ 時間 ]] 「分」和「秒」的部份可以是 00, 01, ..., 59 , 所以: $pattern = '[0-5][0-9]'; 而「時」方面,如果是 12 小時制,它就可以是 01, ..., 10, 11, 12, 如果十位是 0 ,那麼個位可以是 1 至 9, 如果十位是 1 ,那麼個位可以是 0 至 2, 所以: $pattern = '(0[1-9]|1[0-2])'; ## 不容許省略十位的 0 $pattern = '([1-9]|1[0-2])'; ## 不容許十位的 0 $pattern = '(0?[1-9]|1[0-2])'; ## 容許省略十位的 0   如果是24小時制,它就可以是 00, 01, ..., 10, 11, ..., 20, 21, 22, 23, 如果十位是 0 ,那麼個位可以是 0 至 9, 如果十位是 1 ,那麼個位可以是 0 至 9, 如果十位是 2 ,那麼個位可以是 0 至 3, 所以: $pattern = '(0[1-9]|1[0-9]|2[0-3])'; 因為無論十位是 0 或 1,個位都是 0 至 9, 所以可以簡化成: $pattern = '([0-1][1-9]|2[0-3])'; 最後,結合時分秒三部份: $pattern = '([0-1][1-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]'; [[ IP 位址 ]] IP 位址的格式是四個數目,範圍由0至255,用點號分隔, 例如 0.199.249.255。 每個數目都可以是: 0, 1, ..., 100, ..., 199, 200, ...,255 如果百位是 0 或 1 ,那麼十位和個位可以是 0 至 9, 如果百位是 2 和十位是0至4 ,那麼個位可以是 0 至 9, 如果百位是 2 和十位是5 ,那麼個位可以是 0 至 5, 所以: $pattern = '([01]?\d{1,2}|2[0-4]\d|25[0-5])'; 例子: #### @st = ( '0.0.0.0' ,'1.02.003.000' ,'0.199.249.255' ,'1..3.4' ,'1.2.3' ,'0.199.249.256' ); $pattern = '^' . join( '\.', ('([01]?\d{1,2}|2[0-4]\d|25[0-5])') x 4 ) . '$'; print $pattern, "\n"; foreach (@st) { print; if (/$pattern/) { print " : match\n"; } else { print " : not match\n"; } } ####