2016-03-08 77 views
1

我是新來的perl和使用正則表達式。我需要從字符串中刪除空格。一步一步修剪空白

我找到了一個例子,但它對我來說很不透明。這是對發生什麼事情的準確描述?

sub trim($) 
{ 
    my $string = shift; 
    $string =~ s/^\s+//; 
    # =~   : regex on variable string 
    # s/   : replace match with value 
    # ^\s+  : one or more white space characters at beginning 
    # //   : no characters 

    $string =~ s/\s+$//; 
    # =~  : regex on variable $string 
    # s/   : replace match with value 
    # \s+$  : one or more white space characters until end of line 
    # //   : no characters 
    return $string; 
} 
+3

'=〜'和'///'記錄在perlop [here](http://perldoc.perl.org/perlop.html#Binding-Operators)和[here](http:// perldoc .perl.org/perlop.html#S%2f_PATTERN_%2f_REPLACEMENT_%2fmsixpodualngcer)。如果你的系統上安裝了perldoc,你甚至可以通過運行'perldoc perlop'在本地查看文檔。 [perlretut](http://perldoc.perl.org/perlretut.html)和[perlre](http://perldoc.perl.org/perlre.html)是理解正則表達式的好資源。 – ThisSuitIsBlackNot

+5

另外,您應該在自己的代碼中通常[避免原型](http://stackoverflow.com/questions/297034/why-are-perl-5s-function-prototypes-bad)。而不是'修剪($){...}'做修剪{...}' – ThisSuitIsBlackNot

回答

1

是的,由sidyll回答。您的所有評論都是準確的。既然這些都是基本要求,我想補充一點。

您可以在一個表達式中執行這兩個操作,s/^\s+|\s+$//g(有一些效率考慮因素)。 請注意,現在您需要/g(「全局」)修飾符,以便找到全部\s+。否則,發動機在發現^\s+(如果有的話)後停下來,並留下尾隨空間(如果有的話)。

通過使用/x修飾符,可以在正則表達式中使用空格以提高可讀性。在這種情況下,它不是很多,但更復雜的它可以幫助很多。

$string =~ s% ^\s+ | \s+$ %%gx; 

您可以使用不同的分隔符 - 只要您不在正則表達式中使用該分隔符。我使用上面的%來避免編輯器着色一切紅色(我發現%實際上不太可讀,但我需要|裏面)。這有時非常有用,例如當你的正則表達式有很多/時。然後你可以使用不同的分隔符,所以你不必轉義它們。


完整的資源由ThisSuitIsBlackNot在評論中給出。

我見過很多人都讚歎這一點:regex Demo,在這裏你可以輸入一個正則表達式,看看它是如何工作的。

+0

所以整個事情可能是:'$ string =〜s/^ \ s + | \ s * $ // x;'? – flakes

5

是的。

沒有別的可以說,實際上。

+1

我不知道這是否真的是一個答案,但還有什麼可以說:) – Jan

+1

我很高興聽到這個!這種語言很難閱讀! – flakes