2013-08-28 119 views
0

是什麼s#^.*/##s 的意義,因爲我知道,在模式'.'表示它可以代表除了\n隨機字母。正則表達式這是什麼正規表達式S#的意思^ */##小號

然後'.*'應該表示隨機數的隨機字母數。

但在書中它表示,這將刪除所有unix類型的路徑。

我的問題是,這是否意味着我可以用空格替換隨機數的隨機數字?

+0

這裏是關於正則表達式的一個[非常體面的教程](http://www.regular-expressions.info/tutorial.html) –

+4

關於這些都沒有什麼「隨機的」 –

回答

3

替換傳統使用/字符作爲分隔符(s/this/that/),但如果它是更方便,你可以使用其他標點符號。在這種情況下,使用#是因爲正則表達式本身包含/字符;如果使用/作爲分隔符,則該模式中的任何/將不得不轉義爲\/。 (#是不是我會選擇的字符,但它是完全有效的。)

^字符串的開頭(或線;見下文)匹配

.*/匹配的字符直至幷包括任何序列/字符。由於*貪婪,它會匹配所有字符,最多包含最後/字符;任何precedng /字符由.*「吃掉」。 (最終/不是,因爲如果.*匹配所有/字符最終/將不能匹配。)

拖尾s改性劑將字符串作爲一個單一的線,即,使01​​匹配包括換行的任何字符。有關更多信息,請參見perldoc perlre中的ms修飾符。

所以這個:

s#^.*/##s 

取代一切從字符串的開頭($_在這種情況下,因爲這是默認值)高達不受任何最後/字符。

如果$_中沒有/個字符,則匹配失敗,並且替換不執行任何操作。

這可能用於替換絕對路徑名或相對路徑名的所有目錄組件,例如將/home/username/dir/file.txt更改爲file.txt

3

它將刪除所有字符,包括因s修飾符引起的換行符,直到包含最後一個斜槓爲止。

5
 
s  -> subsitution 
#  -> pattern delimiter 
^.* -> all chars 0 or more times from the begining 
/ -> literal/
##  -> replace by nothing (2 delimiters) 
s  -> single line mode (the dot can match newline) 
+0

「all從開始的字符0次或更多次「是一個可怕的解釋。 – ikegami

0

請原諒一點兒。但我一直都在看這個,我認爲重要的是要把它做好。

s#^.*/##s不是正則表達式。

^.*是一個正則表達式。

s///是替代運算符。

替換運算符有兩個參數。第一個是正則表達式。第二個是替換字符串。

替換運算符(像Perl中許多其他類似引號的運算符)允許您更改使用的分隔符。

所以s###也是一個替代操作符(只是使用#而不是/)。

s#^.*/##意味着「發現正則表達式^.*/匹配的文本,並用一個空字符串替換它。而在年底s是改變了正則表達式的一個選項,以便.匹配‘\ n’,以及所有其他字符

相關問題