#用正規表示式進行匹配
=pod
m// = // = m%%,m||,m<>,m{},m(),匹配的時候根據需要寫自己的定界符,像qw省略雙引號定界符一樣
模式匹配修飾符:
跟在定界符後面的,//x,x就是模式匹配修飾符
i 忽略大小寫
s 匹配任意字元
if(/barney.*fred/s){}#s會把//裡面的.全部替換為[\d\d],這是需要再讓.匹配除\n以外的字元時,需要把.換成[^\n]或[\n]
x 忽略空白,如/-?[0-9]+ \.? [0-9]* /x,這其中的空格被無視,加入需要的話可以再空格前面加上\,或著空格以\s*或\s+代替
組合選項修飾符:
if(/barney.*fred/is)
if(msix) {}
選擇一種字元解釋方式:
/\w+/a #僅僅是a-z、a-z、0-9、_這些字元
/\w+/u #任何unicode當中定義為單詞的字元
/\w+/l #類同於acsii的版本,但單詞字元的定義取決於本地化設定
#所以如果設定為latin-9的話
其他選項:
錨位:perl5
\a: 匹配字串的絕對開頭
mi #判斷字串是否以https開頭
\z: 匹配字串的絕對末尾,\z後面再沒其它東西
mi #匹配以.png結尾的字串
\z: 行末錨位,它允許後面出現換行符
while()
; /\a\s*\z/:匹配乙個空行
錨位:perl4
^:脫字元開頭錨位
$:結尾錨位 ->行末
匹配多行行末是fred的字串
/fred$/m
匹配單行最好用,\a,\z
單詞錨位:
\b: 只匹配以\w開頭或結尾,只匹配字元[0-9a-za-z]
/\bhunt/:匹配hunt hunting hunter,而不匹配shunt
/stone\b/:匹配standstone flintstone但不包括capstones
\b: 非單詞邊界錨位是\b,它能匹配所有\b不能匹配的位置
/\bsearch\b/會匹配searches、searching與searched,但不匹配search或researching #####沒看懂啥意識,和\b有啥區別
繫結操作符=~:
預設情況下模式匹配的操作物件時$_,繫結操作符告訴perl,拿右邊的模式來匹配左邊的字串,而不是匹配$_
如:if($some_other =~ /\brub/)
快消型別:my $likes_perl = (=~ /\byes\b/i);#判斷輸入的資料中是否有yes子串,有的話,$likes_perl為1,否則為0
模式的內插:
即可插入變數,當做查詢的引數
while(<>) }
my $what = shift @ar**;
如果第乙個命令列引數是fred|barney,則模式會變成/\a(fred|barney)/,也就是會在每行的開頭尋找fred或barney。
捕獲變數:
圓括號出現的地方一般都會觸發正規表示式引擎捕獲匹配到的字串,捕獲組會把匹配圓括號中模式的字串儲存到相應的位置,如果不止乙個括號,就不止乙個捕獲組。每個捕獲組包含的都是原始字串中的內容,而不是模式本身。我們可以通過反向引用取得這些捕獲內容,但也可以再匹配操作結束後立即通過相應的捕獲變數取得這些內容。
因為有了捕獲變數,我們才得擁有提取字串中某些特定部分的能力。
if(/\s(\[a-za-z]+),/) #$1
if(/(\s+) (\s+) (\s+)/) #$1, $2, $3
捕獲變數的存續期:
儲存到下次匹配成功為止,再匹配成功則會將上次匹配的結果給覆蓋掉。
如果想在數行之外使用捕獲變數的話,最好將$1...賦給乙個變數,這樣也能增加程式的可讀性,如my $wilma_word = $1;
不捕獲模式:?:
if(/(?:bronto)?saurus(steak|burger))#?:告訴bronto的圓括號只是為了分組才存在的。那麼存在$1中的就是第二個括號裡的steak|burger
命名捕獲:
if($name =~ m/(\w+)(and|or)(\w+))#現在能匹配了
my $name = 'fred or barray';
if($names =~ m/(?\w+)(?:and|or) (?)\w+/)
print "i saw $+ and $+";
my $name = "fred filnstone and wilma filntstone";
if($names =~ m/(?\w+/) and \w+ \g/)
"};自動捕獲變數:
$&, $`, $'
if("hello there, neighbor" =~ /\s(\w+),/)
; 匹配到的結果放到$&裡,匹配區段之前的內容會存到$`裡,而匹配區段之後的內容則會存到$'裡,將三者依次連線起來,就一定會得到原來的字串。
一旦使用了某個自動捕獲變數,其他正規表示式的執行速度會變慢。
use 5.010;
if("hello there, neighbor" =~ /\s(\w+),/p)
'.\n";
} if("hello there, neighbor" =~ /\s(w+),/p)
)($)($).\n";
} 上面三個和$`,$&,$'是等價的
通用量詞:
/a/匹配a 5到15次
/(fred)/匹配fred 3到無限次
/\w/匹配w 8次
模式測試程式:
#!/usr/bin/perl
while(<>)
else
}=cut
簡單練習:
#!/usr/bin/perl
=pod
while(1)
else }
=cut
=pod
while(1)
else }
=cut
=pod
#ex8_3
while()
else }
=cut
=pod
use 5.010;
while()
\n'"; #新的輸出行
} else }
=cut
=pod
#ex8_5
m! (\b\w*a\b) #$1: 某個以字母a結尾的英文單詞
(.) #$2: 後面接上的字元不超過5個
!xs #/x和/s修飾符
=cut
#ex8_6
while(<>) }
system "pause";
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
C語言 第八章
這一章沒有怎麼仔細看,其實也很簡單,記住格式就行了。等不會的時候可以翻書看一下就ok了。到此為止,譚浩強的這本書已經看完一遍了,找到了10個左右的錯誤,感覺有點驚訝。後天c語言的聖經就買回來了,到時候再認真看看那本吧 評價極高啊 聖經orz 一 c語言的標準 i o庫中定義了3個 file 型指標 ...