-2
需要計算字符串中「$ 0.00」的數量。我正在使用:
my $zeroDollarCount = ("\Q$menu\E" =~ tr/\$0\.00//);
但它不起作用。問題是$
標誌正在拋出正則表達式。如果我只想計算$
的數目,但無法找到$0.00
,則它可以工作。
這是如何重複的?您的解決方案沒有解決美元符號,這對我來說是一個問題。
需要計算字符串中「$ 0.00」的數量。我正在使用:
my $zeroDollarCount = ("\Q$menu\E" =~ tr/\$0\.00//);
但它不起作用。問題是$
標誌正在拋出正則表達式。如果我只想計算$
的數目,但無法找到$0.00
,則它可以工作。
這是如何重複的?您的解決方案沒有解決美元符號,這對我來說是一個問題。
您正在使用音譯運算符tr///
。這與模式沒有任何關係。您需要代替匹配運算符m//
。並且因爲您希望它找到該模式的所有發生,請使用/g
修飾符。
my $count =() = $menu =~ m/\$0\.00/g;
如果我們運行這個程序,輸出爲。
use strict;
use warnings;
my $menu = '$0.00 and $0.00';
my $count =() = $menu =~ m/\$0\.00/g;
print $count;
現在讓我們來看看發生了什麼。首先,比賽的模式。
/\$0\.00/
這是相當直接的。有一個字面$
,我們需要用反斜槓\
逃脫。零後面跟着一個文字點.
,我們再次需要轉義,因爲它與$
一樣,它在正則表達式中有特殊的含義。
my $count =() = $menu =~ m/\$0\.00/g;
這整條線看起來很奇怪。我們可以將其分解成幾行以使其更具可讀性。
my @matches = ($menu =~ m/\$0\.00/g);
my $count = scalar @matches;
我們需要對正則表達式匹配的/g
開關,使其符合所有出現。在列表上下文中,匹配操作會返回所有匹配項(這將是字符串"$0.00"
多次)。因爲我們需要計數,我們然後將其強制爲scalar
上下文,這給了我們元素的數量。這可以通過上面的成語縮寫爲一行。
$是扔掉這個。你的鏈接沒有解決這個問題。 –
其實它確實如此。但我仍然認爲這不是重複。我發佈了一個解釋你做錯了什麼的答案。 – simbabque
我無法讓它工作,它已經嘗試了3天。 –