9,以正則表達處理文字(perl筆記)
如果把m//模式匹配運算子想成文書處理器的查詢功能,那麼“查詢與替換”的功能就是perl的s///替換運算子。
$_ = "He's out bowling with barney tonight.";
s/Barney/Fred/; #用Fred替換Barney
print "$_ ";如果匹配失敗,則什麼事都不會發生,變數也不受影響。
s///會返回有用的布林值。它在替換成功時為“真”,否則為“假”
2,以/g進行全域性替換
一個場景的全域性替換是縮減空白,也就是將任何連續的空白轉換為單一空格
$_ = "Input data may have extra whitespace.";
s/s+/ /g;
3,不同的定界符
對於一般沒有左右之分的字元,用法便跟使用斜線一樣,只用3個定界符即可
s#^
如果有左右之分的成對字元,就必須使用兩對,一對包住模式,一對包住替換自發串,包住字串和模式的定界符號簿需要相同
s{fred}{barney};
s[fred}(barney);
s
4,選項修飾符
不僅是/g修飾符,替換執行也可以使用我們在一般模式中看到的/i與/s修飾符。修飾符的順序對結果沒有任何影響。
5,繫結運算子
就像在說明m//時提到的,我們也可以用繫結運算子為s///選擇不同的目標
6,大小寫轉換
U跳脫字元會將其後的所有字元轉換成大寫
$_ = "I saw Barney with Fred.";
s/(fred|barney)/U$1/gi; #$_ 現在是"I saw BARNEY with FRED."
L跳脫字元會將其後的字元轉換成小寫
s/(fred|barney)/L$1/gi; #$_ 現在是"I saw barney with fred."
可以使用E關閉大小寫轉換功能
s/(w+) with (w+)/U$2E with $1/i; #$_ 現在是“I saw FRED with barney."
使用小寫形式(l與u)時,它們只會影響之後的第一個字元
s/(fred|barney)/u$1/ig; #$_ 現在是" I saw FRED with Barney."
使用u與L來表示"全部轉換為小寫,但首字母大寫"
s/(fred|barney)/uL$1/ig; #$_ 現在是“I saw Fred with Barney."
這裡介紹的是替換大小寫的轉換,但他們也適用於任何雙引號內的字串
print "Hello, Lu$nameE, would you like to play a game?
";
7, split運算子
它會根據分割符(separator)拆開一個字串。這對處理製表符,冒號,空白或任意符號分割的資料相當有用
@fields = split /separator/, $string;
例如:
@fields = split /:/, "abc:def:g:h"; #產生("abc","def","g","h")
利用/s+/模式以空白進行分割也是常見的做法,在此模式下,所有的空白會被當成一個空格來處理
my $some_input = "This is a test.
";
my @args = split /s+/, $some_input; #("This","is","a","test.")
split預設會以空白字元拆開$_:
my @fields = split; #等於 split /s+/, $_;
8, join函式
split會將自費串分解為整個片斷(子字串),而join則會把這些片斷聯合成一個字串。它的用法如下所示:
my $result = join $glue, @pieces;
例如:
my $x = join ":" 4,6,8,10,12; # $x 為 "4:6:8:10:12"
9, 列表上下文中的m//
$_ = "Hello there, neighbor!";
my($firse,$second,$third) = /(s+) (s+), (s+)/;
print "$sencond is my $third
";
之前在s///的例子中所看到的/g修飾符,同樣也可以用在m//運算子上,其效果就是讓模式能夠匹配到字串中的許多地方。下面的例子中
具有一對圓括號的模式,會在每次匹配成功是返回一個記憶:
my $text = "Fred droped a 5 ton granite block on Mr. Slate";
my @words = ($text =~ /([a-z]+)/ig);
print "Result:@words
";
# Result: Fred dropped a ton granite block on Mr Slate
如果裡面不僅僅是一對圓括號,那麼每次匹配成功,就可能返回一個以上的字串,假設,我們想把一個字串變成雜湊,就可以這樣做:
my $date = "Barney Rubble Fred Flintstone Wilma Flintstone";
my %last_name = ($sdata =~ /(w+)S+(w+)/g);
10, 非貪心量詞
/fred.+?barney/
11, 跨行的模式匹配
傳統的正規表示式都是用來匹配單行文字。由於perl可以處理任意長度的字串。其模式匹配也可以處理多行穩步,與處理單行穩步並無
差異。
$_ = "I'm much better
than Barney is
at bowling,
Wilma.
";
^與$這兩個錨點原本代表整個字串的頭跟尾。當模式加上/m修飾符後,就可以讓他們也代表換行符號。這樣一來,他們所代表的就不在
是整個字串的頭尾,而是每行的開頭跟結尾。
print "Fonud 'wilma' at start of line
" if /^wilma
/im;
11,一次更新多個檔案
#!/usr/bin/perl -w
use strict;
chomp(my $sdate = `date`);
$^I = ".bak";
while (<>) {
s/^Author:.*/Author: Randal L. Schwartz/;
s/^Phone:.*
//;
s/^Date:.*/Date:$date/;
print;
}
# $^I 先把檔案做一個備份
12,不具記憶功能的圓括號
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245694/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Golang正則筆記 :使用正規表示式處理題庫文字Golang筆記
- 8,以正規表示式進行匹配(perl筆記)筆記
- 正則表達工具
- 吳恩達機器學習筆記 —— 8 正則化吳恩達機器學習筆記
- Golang 的正則表達Golang
- 正則筆記筆記
- 7,正規表示式(perl筆記)筆記
- 正則表達batchInert,過濾BAT
- 筆記bs,正則筆記
- Perl 正則式應用
- Java處理正則匹配卡死(正則回溯問題)Java
- PERL學習筆記---正規表示式筆記
- 正則學習筆記筆記
- Python之正則表達運用Python
- perl處理中文
- perl 處理HTMLHTML
- CSS 小結筆記之文字溢位處理CSS筆記
- python筆記-文字處理(第三天)Python筆記
- JavaScript正則學習筆記JavaScript筆記
- Python 基礎筆記——正則Python筆記
- PERL學習筆記---正規表示式的應用筆記
- replace()方法的正則表達相關應用
- perl中文處理問題
- python-文字處理和正規表示式Python
- 正規表示式學習筆記(1)-認識正則筆記
- 學習筆記——正則匹配方法整理筆記
- 隨手查閱的正則匹配筆記筆記
- 機器學習筆記——模型選擇與正則化機器學習筆記模型
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- 【scikit-learn基礎】--『預處理』之 正則化
- 吳恩達《Machine Learning》精煉筆記 3:迴歸問題和正則化吳恩達Mac筆記
- perl學習筆記1筆記
- 14,程式管理(perl筆記)筆記
- perl學習筆記(7)筆記
- 達夢資料庫日常管理之問題處理筆記1資料庫筆記
- 一直都沒有理解perl的正則
- ES6學習筆記(四)【正則,集合】筆記
- java異常處理筆記Java筆記