2013-07-04 55 views
-1

下面的代碼段做了什麼?這個Perl正則表達式做什麼?

if ($str =~ /^:(\w+)/) { 
     $hash{$1} = 1; 
} 

它使用第一個成功捕獲作爲密鑰在散列。並且$str必須包含一個或多個單詞,但我不確定^:的含義是什麼

回答

0

^:在行首的意思是「:」符號。它也將後:

0

只捕獲 「字」 這意味着^在開始行了:

例如:

$string = q~:Thats~;

$hash{Thats} = 1;

$string2 = q~Thats~;

if陳述成功$string,但它在$string2失敗,因爲它不是以:開頭。

6
^  start at beginning of string 
:  match a literal colon 
(  capture the following string 
\w+  matching one or more alphanumeric characters 
)  end capture 

捕獲存儲在$1,然後成爲在下面的散列%hash一個鍵。

所以,如果你有字符串:foo,你會匹配foo,並得到$hash{foo} = 1。此代碼的目的無疑是提取某些字符串並使用哈希重複數據刪除。

0

你說:

'And the $str has to contain one or more words ...'

我不知道這是一個簡單的錯字,或者如果你的目的是從你的小例子不同。現在(根據你的帖子),你的正則表達式會匹配一個字符串,如::Hello。在Perl中,這可能是也這樣寫

my %hash =(); 
my $str = ':Hello'; 

$hash{ $1 }++ if $str =~ /^:(\w+)/; 

現在,如果你在你的正則表達式來[:^],這意味着改變^::你在你的串詞應該用「開始串的」 ^前面或者冒號:,你的正則表達式現在可以匹配如下行:'Hello:World:Perl:Script';(也許這是真正的意圖)。

這樣的字符串可以然後在while循環解剖:

$hash{ $1 }++ while $str =~ /[:^](\w+)/g; 

如果打印捕獲鍵:print "@{[keys %hash]}"; 結果將是:Perl Script Hello World(鍵的順序是不確定的)。

這些類型的字符串在unix世界中很普遍,例如,環境變量PATH,LD_LIBRARY_PATH,以及文件/etc/passwd看起來像那樣。

順便說一句,這只是一個想法 - 如果你的錯字不是真的; - )

相關問題