下面的代碼段做了什麼?這個Perl正則表達式做什麼?
if ($str =~ /^:(\w+)/) {
$hash{$1} = 1;
}
它使用第一個成功捕獲作爲密鑰在散列。並且$str
必須包含一個或多個單詞,但我不確定^:
的含義是什麼
下面的代碼段做了什麼?這個Perl正則表達式做什麼?
if ($str =~ /^:(\w+)/) {
$hash{$1} = 1;
}
它使用第一個成功捕獲作爲密鑰在散列。並且$str
必須包含一個或多個單詞,但我不確定^:
的含義是什麼
^:
在行首的意思是「:」符號。它也將後:
只捕獲單 「字」 這意味着^
在開始行了:
例如:
$string = q~:Thats~;
$hash{Thats} = 1;
$string2 = q~Thats~;
if
陳述成功$string
,但它在$string2
失敗,因爲它不是以:
開頭。
^ 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
。此代碼的目的無疑是提取某些字符串並使用哈希重複數據刪除。
你說:
'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
看起來像那樣。
順便說一句,這只是一個想法 - 如果你的錯字不是真的; - )