是什麼s#^.*/##s
的意義,因爲我知道,在模式'.'
表示它可以代表除了\n
隨機字母。正則表達式這是什麼正規表達式S#的意思^ */##小號
然後'.*
'應該表示隨機數的隨機字母數。
但在書中它表示,這將刪除所有unix類型的路徑。
我的問題是,這是否意味着我可以用空格替換隨機數的隨機數字?
是什麼s#^.*/##s
的意義,因爲我知道,在模式'.'
表示它可以代表除了\n
隨機字母。正則表達式這是什麼正規表達式S#的意思^ */##小號
然後'.*
'應該表示隨機數的隨機字母數。
但在書中它表示,這將刪除所有unix類型的路徑。
我的問題是,這是否意味着我可以用空格替換隨機數的隨機數字?
替換傳統使用/
字符作爲分隔符(s/this/that/
),但如果它是更方便,你可以使用其他標點符號。在這種情況下,使用#
是因爲正則表達式本身包含/
字符;如果使用/
作爲分隔符,則該模式中的任何/
將不得不轉義爲\/
。 (#
是不是我會選擇的字符,但它是完全有效的。)
^
字符串的開頭(或線;見下文)匹配
.*/
匹配的字符直至幷包括任何序列/
字符。由於*
是貪婪,它會匹配所有字符,最多包含最後/
字符;任何precedng /
字符由.*
「吃掉」。 (最終/
不是,因爲如果.*
匹配所有/
字符最終/
將不能匹配。)
拖尾s
改性劑將字符串作爲一個單一的線,即,使01匹配包括換行的任何字符。有關更多信息,請參見perldoc perlre
中的m
和s
修飾符。
所以這個:
s#^.*/##s
取代一切從字符串的開頭($_
在這種情況下,因爲這是默認值)高達不受任何最後/
字符。
如果$_
中沒有/
個字符,則匹配失敗,並且替換不執行任何操作。
這可能用於替換絕對路徑名或相對路徑名的所有目錄組件,例如將/home/username/dir/file.txt
更改爲file.txt
。
它將刪除所有字符,包括因s
修飾符引起的換行符,直到包含最後一個斜槓爲止。
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)
「all從開始的字符0次或更多次「是一個可怕的解釋。 – ikegami
請原諒一點兒。但我一直都在看這個,我認爲重要的是要把它做好。
s#^.*/##s
不是正則表達式。
^.*
是一個正則表達式。
s///
是替代運算符。
替換運算符有兩個參數。第一個是正則表達式。第二個是替換字符串。
替換運算符(像Perl中許多其他類似引號的運算符)允許您更改使用的分隔符。
所以s###
也是一個替代操作符(只是使用#
而不是/
)。
s#^.*/##
意味着「發現正則表達式^.*/
匹配的文本,並用一個空字符串替換它。而在年底s
是改變了正則表達式的一個選項,以便.
匹配‘\ n’,以及所有其他字符
這裏是關於正則表達式的一個[非常體面的教程](http://www.regular-expressions.info/tutorial.html) –
關於這些都沒有什麼「隨機的」 –