2017-09-19 14 views
1
$cmd =~ [email protected] [^ ][email protected]@; 

有沒有人讓我知道這個正則表達式在Perl中意味着什麼? 我找不到像上面通過谷歌搜尋的任何正則表達式...

+3

看起來它只是。替換' - fp [^] +'(文字'-fp',空格,至少有一個非空格字符)由空字符串組成。我想,'@'只是正則表達式的分隔符。 – Xufox

+0

您可以前往regex101.com並在頂部的欄中輸入一個模式進行測試,並查看每個步驟的解釋。這個正則表達式匹配除[[^] +]之外的所有文字字符,它與一個或多個非空格字符相匹配。 – CAustin

+0

Xufox是正確的,CAustin是部分正確 –

回答

5

這將從命令中刪除-fp可選參數及其值。


這需要由變量$cmd存儲的串和替換一個部分匹配-fp [^ ]+什麼也沒有。

該命令使用Perl替換(或其他正則表達式修飾符)可以具有任何分隔符的事實。這裏通常寫作s/.../.../的是[email protected]@[email protected]。這可能是混淆的根源。

=~是一個binary binding operator它將左參數作爲字符串來執行正確的參數參數,在這種情況下是替代。

-fp [^ ]+

  1. -fp比賽字面上。
  2. [^ ]+匹配一個或多個不是空格的字符。
+0

非常感謝!你的回答幫助了我。 – Kim

+1

@ benjamin-w感謝代碼標籤的技巧:)我將不再有這個問題 –

0

讓我們先輕鬆一點。 $cmd =~僅僅意味着「對變量$cmd進行替換」。

並非所有表達式都是正則表達式。它實際上是替代運營商 - s/REGEX/STRING/。它匹配REGEX並用STRING替換它。

與Perl中許多類似的運算符一樣,替換運算符允許您選擇使用的分隔符。在這種情況下,程序員使用@做出了一些奇怪的選擇。

因此,我們有這樣的:

$cmd =~ s/-fp [^ ]+//; 

而我們現在知道這意味着什麼。 「將變量$cmd與正則表達式-fp [^ ]+匹配,並將其替換爲空字符串」。爲什麼是空字符串?因爲替換字符串位(第二個和第三個/之間)是空字符串。

我們現在要做的就是了解實際的正則表達式 - -fp [^ ]+。這並不複雜。

  • -fp - 前四個字符(直到包括空格)都與自己匹配。所以這匹配文字字符串「-fp」。
  • [^ ] - 這是一個「角色班」。通常,這意味着「匹配[...]內的任何字符」。但^在開始時意味着「匹配任何字符預計之間的那些[^...]。所以這是匹配任何不是空間。
  • + - 這是一個修飾符,意思是「匹配以前的一個或多個表達式」。

因此,放在一起,這是「匹配字符串‘-fp’後面跟着一個或多個非空格字符

而且,在表達式的其餘部分加入,我們得到:

看在$cmd的字符串,如果找到字符串「-fp - 」後面跟着一個或多個非空格字符,然後用一個空字符串替換匹配的部分