使用Perl刪除前導和拖尾空白

2021-06-21 19:01:12 字數 1777 閱讀 6468

其它一些程式語言中,有函式ltrimrtrim分別用於從字串開頭和末尾刪除空格和製表符。 也有的提供了函式trim來刪除字串兩端的空白字元。

perl裡沒這些函式因為簡單的正規表示式替換就能實現這個目的(不過我確信cpan有很多模組實現了這些函式)。

事實上這太簡單了以至於成了

帕金森瑣碎定理

裡的乙個顯著主題。

ltrim或者lstrip從字串左側刪除空白字元:

$str =~ s/^\s+//;

從字串開頭^開始匹配乙個或者多個空白字元(\s+),並將之替換成空字元。

rtrim或者rstrip從字串右側刪除空白字元:

$str =~ s/\s+$//;

匹配乙個或者多個空白字元(\s+)直到字串末尾($),並將之替換成空字元。

trim刪除字串兩端的空白字元:

$str =~ s/^\s+|\s+$//g

將上面兩個正規表示式用或記號|連起來,並在最後增加/g用以全域性地執行替換操作(反覆多次)。

如果你不想在**中看到這些結構,你可以在**裡新增這些函式:

sub ltrim ;

sub rtrim ;

sub trim ;

使用時像這樣:

my $z = " abc ";

printf "<%s>\n", trim($z); # printf "<%s>\n", ltrim($z); # printf "<%s>\n", rtrim($z); # < abc>

string::util

要是實在不想拷貝那些東西,你可以安裝乙個模組。

例如string::util提供了函式trim,你可以如下使用:

use string::util qw(trim);

my $z = " abc ";

printf "<%s>\n", trim( $z ); # printf "<%s>\n", trim( $z, right => 0 ); # printf "<%s>\n", trim( $z, left => 0 ); # < abc>

預設它整理兩側,你不需要提供引數。 我覺得,自己實現ltrim和rtrim會清晰些。

另乙個模組text::trim提供了3個函式,但是它極度採納了perl風格的寫法,可能到了有些危險的地步。

如果你呼叫它並將返回值用在print語句或者賦給乙個變數,它會返回整理過的字串,並保持原始字串不變。

use text::trim qw(trim);

my $z = " abc ";

printf "<%s>\n", trim($z); # printf "<%s>\n", $z; # < abc >

另一方面,如果你在空白上下文呼叫它,亦即不使用返回值,trim函式就會修改引數,產生類似chomp的行為。

use text::trim qw(trim);

my $z = " abc ";

trim $z;

printf "<%s>\n", $z; #

sql刪除前導和字尾

1 patindex用法 patindex pattern expression 2 獲取開始擷取開始的位置 start patindex pattern expression 1 3 獲取匹配後擷取字串的長度 length len expression patindex pattern expre...

使用拖管和執行緒

delegate void mydelegate mainf f 定義拖管 引數為mainf型別 thread t 宣告執行緒 public void threadstart 執行緒啟動擊需要的函式引數 thread.sleep 1000 迴圈執行執行緒中的createform函式 createfo...

145 刪除字串前導和後導 號

假定輸入的字串中只包含字母和 號。函式fun的功能是 值刪除字串前導和尾部的 號,串中字母之間的 號都不刪除。形參n給出了字串的長度,形參h給出了字串中前導 號的個數,形參e給出了字串中最後 號的個數。編寫函式時,不得使用c語言提供的dev字串函式。define crt secure no warn...