perl 是一門功能強大的指令碼語言,誕生於 20 世紀 80 年代,其思想主要來自其他的程式語言
和工具。perl 關於文字處理和正規表示式的許多概念都是來自awk
和sed
, perl 可以應用於
多平台, 文字處理能力極其強大, 是 web 的處理中最常使用的工具。
$ perl
$celsius = 30; # 定義變數
$fahrenheit = ($celsius * 9 / 5) + 32; # 組合乙個新的變數
print
"$celsius c is $fahrenheit f.\n"; # prel 中的變數可以直接出現在字串內
30 c is 86 f. # 輸出結果
# perl 中的迴圈
$ perl
$count = 10;
while( $count-- > 0)98
7654
3210
# 儲存在文字中執行
$ perl -w perlscript # -w 表示以 warning 模式執行該指令碼98
7654
3210
# 正規表示式匹配文字
if($reply =~ m/^[0-9]+$/) else
print
"請輸入乙個數字\n";
$celsius = ; # 從使用者處接受乙個輸入
chomp($celsius); # 去掉 $celsius 後面的換行符
if($celsius =~ m/^-?[0-9]+(\.[0-9]*)?$/) else
$ perl perlregex
# 匹配一行或多行文字
(.*\n)+
# 錯綜複雜的正規表示式
^([-+]?[0-9]+(\.[0-9]*)?) # 最外面的括號會建立乙個變數 s1 來儲存
# 而 (\.[0-9]*) 雖然只是用來分組問號限定的物件,也會將它匹配的文字存入 s2
^([-+]?[0-9]+(?:\.[0-9]*)?) # (?:\.[0-9]*) perl 提供的元字元,表示只用於分組,而不會影響文字的捕獲和變數儲存
[. ]*和(.*|
*) : 可以匹配若干空格符及若干製表符
[.\t]* : 匹配若干個製表符
\s : 匹配所有空白字元,其中包括空格符、製表符、換行符和回車符
# 替換匹配文字
$str = "i love perl perl";
$str =~ m/perl/i; # 忽略大小寫匹配 perl, 匹配成功返回 1, 否則 0
$str =~ s/perl/bash/g; # 全域性替換將 str 中的 perl 替換為 bash
$str !~ tr/a-z/a-z/; # 表示將變數 $str 中的所有大寫字母轉化為小寫字母,如果轉化發生了則返回 "0",否則返回 "1"
print
"$str";
i love bash bash
# 保留浮點數的小數字
$price = 12.3750000000392; # 因浮點數在計算機的特性, 導致多出來很多小數字
$price =~ s/(\.\d\d[1-9]?)\d*/$1/; # (\.\d\d[1-9]?) 表示保留兩位小數點, 當第三位不為 0 時, 也會保留
print
"$price\n";
2.2.1 四種型別的環視
型別正規表示式
匹配成功條件
肯定順序環視
(?=…)
子表示式能夠匹配右側文字
否定順序環視
(?!…)
子表示式不能匹配右側文字
肯定逆序環視
(?<=…)
子表示式能夠匹配左側文字, 從右向左看文字, 例如 (?<=d) 如果當前位置的左邊是乙個數字, 則匹配成功
否定逆序環視
(?子表示式不能匹配左側文字
2.2.2 使用案例
(?=jeffrey)jeff # 環視的正規表示式
by jeffrey friedl. # 可以匹配 (?=jeffrey)jeff
by thome jefferson. # 不可以匹配, 因為無法匹配環視 (?=jeffrey)
# 將 jeffs 替換成 jeff's
s/jeffs/jeff's/g # 全域性將 jeffs 替換為 jeff'
ss/\bjeffs\b/jeff's/g # 全域性替換單詞(必須是單詞)
s/\b(jeff)(s)\b/$1'
$2/g # 與上一行效果一致
s/\bjeff(?=s\b)/jeff'/g # 使用環視實現替換, 未尾的 s 不需要替換
s/(?<=\bjeff)(?=s\b)/'/g # 完全使用環視實現, 不替換任何字元, 只插入乙個 ' 號
$ perl
$str = "by jeffs friedl.";
$str =~ s/(?<=\bjeff)(?=s\b)/'/g;
print
"$str";
by jeff's friedl. # 輸出結果
# 為金額新增分隔逗號
$str = "12345678";
$str =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g; # (?<=\d) 保證左邊必須是數字, ?=(\d\d\d) 保證右邊是 3 個數字, $ 保證結尾是數字(因為替換過程中會有 , 逗號)
print "$str";
12,345,678
# text to html
## 文字檔案 file-slurp
this is a sample file.
it has three lines.
that'
s all.
## 轉換指令碼
undef
$/; # 進入 "file-slurp" 檔案讀取模式
$text = <>; # 讀入命令列指定的第乙個檔案
$text =~ s/^|$//mg; # m 表示增加行描點, 保持檔案原有行模式, 缺省會將檔案所有行視為一行
print
"$text";
## 執行指令碼
$ perl html.perl file-slurp
windows socket程式設計入門示例2
tcpsocketserver.cpp include include include pragma comment lib,ws2 32.lib define ip address 127.0.0.1 define port 5678 static dword winapi recvthread ...
正則入門例項拓展
本篇主要介紹perl 以及其他流派的正則 提供的簡記法 shorthands 以及修改文字中使用的正則環視特性,包括幾個舉例。在看這篇之前,不管你是否精通正則,建議首先看下這篇 正則基礎與細節回顧 因為強大的正則裡面,需要關注的細節太多了。s和 t 匹配空白 匹配任何字元.號萬用字元,任意個數,可以...
RocketMq入門 入門示例
網上眾說紛紜。有的說啟動命令不對,有的說rocketmq預設不允許開發者私自建立topic。最後手動建立topic。但是發現消費不了訊息,很奇怪。今天我又重新安裝了一遍rocketmq。測試了一下發現還可以。上圖是rocketmq的架構圖。我們必須要對上述的一些組建或者結點做一些說明解釋 produ...