我試圖在perl中使用正則表達式從字符串中提取文本和數字。這裏是我的代碼:使用正則表達式在Perl中應用過濾器
$line = "finish=100\n";
($var) = $line =~ /[a-z]+/;
($val) = $line =~ /[0-9]+/;
我預期的輸出是$ VAR = 「完成」 和$ VAL = 100。然而,當我運行的代碼是$ var = 1和$ VAL = 1
任何幫助將不勝感激!
我試圖在perl中使用正則表達式從字符串中提取文本和數字。這裏是我的代碼:使用正則表達式在Perl中應用過濾器
$line = "finish=100\n";
($var) = $line =~ /[a-z]+/;
($val) = $line =~ /[0-9]+/;
我預期的輸出是$ VAR = 「完成」 和$ VAL = 100。然而,當我運行的代碼是$ var = 1和$ VAL = 1
任何幫助將不勝感激!
使用捕捉你的正則表達式括號內:
$line = "finish=100\n";
($var) = $line =~ /([a-z]+)/;
($val) = $line =~ /([0-9]+)/;
print "$var $val\n";
參考perlre
一個正則表達式匹配在列表環境(其中正則表達式不使用/g
標誌)返回
$1, $2, ...
),如果它成功和模式包含捕獲組1
如果成功和模式沒有捕獲任何你的正則表達式匹配,但它們不包含任何捕獲組,所以這是爲什麼你在$var
和$val
得到1
。
如果添加捕獲組(/([a-z]+)/
,/([0-9]+)/
),則會得到匹配的子字符串。
注意,這可能是更容易只是做這一切在一次比賽:
my ($var, $val) = $line =~ /^([a-z]+)=([0-9]+)$/;
這樣你也驗證輸入字符串具有預期的形式,而不是僅僅像"Cat o' 9 tails"
,其中(與您的原始正則表達式)將提取$var = "at"
和$val = "9"
。
你也能得到一個陣列的兩個值,可能與此:
$line = "finish=100\n";
@matches = $line =~ /(\w+)\W(\d+)/;
print "$matches[0], $matches[1]";