使用我通常的 'X' 用法是:質樸的 'X' 在Perl
print("#" x 78, "\n");
哪個地連接了字符串78倍 「#」。但最近我遇到了這個代碼:
while (<>) { print if m{^a}x }
它打印輸入的每一行開頭的「A」。我理解正則表達式匹配部分(m {^ a}),但我真的不明白'x'在這裏做什麼。
任何解釋將不勝感激。
使用我通常的 'X' 用法是:質樸的 'X' 在Perl
print("#" x 78, "\n");
哪個地連接了字符串78倍 「#」。但最近我遇到了這個代碼:
while (<>) { print if m{^a}x }
它打印輸入的每一行開頭的「A」。我理解正則表達式匹配部分(m {^ a}),但我真的不明白'x'在這裏做什麼。
任何解釋將不勝感激。
這是修飾符的正則表達式。 x
修飾符告訴perl忽略正則表達式中的空格和註釋。
在你的示例代碼中,它沒有區別,因爲在正則表達式中沒有空格或註釋。
在這個用例中,'x'是一個正則表達式修飾符,它「通過允許空格和註釋擴展您的模式的易讀性」。根據perl文檔。但在這裏看起來多餘
不是「冗餘」,而是「不必要」。 – 2010-06-30 14:32:25
@clintp:多餘(意思是'不必要')和不必要的區別是什麼? – 2010-06-30 14:37:41
'冗餘'並不僅僅意味着'不必要'。這意味着'不必要的,因爲別的東西可以達到同樣的目的'。在這種情況下,沒有任何其他信息告訴正則表達式忽略空白/評論。沒有任何空白/評論,所以沒有必要忽略它們。 – pkaeding 2010-06-30 14:42:33
第一種情況下的「x」是一個重複操作符,它將字符串作爲左側參數,並將重複次數作爲正確參數。 Perl6可以使用「xx」重複操作符複製列表。
第二個示例使用正則表達式m{^a}x
。雖然您可能會使用許多不同類型的分隔符,但新手可能會喜歡使用熟悉的符號,該符號使用正斜槓:m/^a/x
正則表達式中的「x」被稱爲修飾符或標誌,可能使用的可選標誌。它用於忽略正則表達式模式中的空白,但它也允許使用正常的註釋。由於正則表達式模式可能會變得非常漫長和令人困惑,因此使用空格和註釋非常有幫助。
你的例子非常短(如果該行的第一個字母是以「a」開頭的話),所以你可能不需要空格或註釋,但是如果你想的話可以。
例子:
m/^a # first letter is an 'a'
# <-- you can put more regex on this line because whitespace is ignored
# <-- and more here if you want
/x
感謝vol7ron,我不知道你可以用正則表達式 – 2010-07-04 17:31:14
謝謝各位的明確的解釋。 – 2010-06-30 14:36:33
值得一提的是,你可以通過'perldoc perlre'獲得這個信息。它甚至在第一頁上! – leander 2010-06-30 16:16:01