[問題] regex 字串擷取

作者: doom8199 (~口卡口卡 修~)   2012-11-17 12:23:26
版上各位先進好,小弟最近在自學 Perl
目前念到 regular expression 那部分
其中字串比對成功後,會把比對結果儲存到 $1, $2,.. 裏頭
所以自己打了一小段 code:

#!/usr/bin/perl -w
use strict;
my $content = "I hate bugs";
print "$1\n" if ($content =~ (/i.*bugs/i));

但我實際測試一下,卻發生以下 warning:
"Use of uninitialized value $1 in print at pl08e05.pl line 5"
而且也沒有 print 出任何結果 Q_Q
上網找很久,也沒有人有這方面的問題
不知道是 code 哪邊沒打好,或是作業系統or版本問題
我目前是在 Win7 下安裝 StrawBerry perl v5.16
(ps: 上禮拜有抓到 v5.18,但不知為何官網把它撤掉)
麻煩各位先進解惑 >_<
作者: micangela (嘟)   2011-01-17 13:32:00
要用小括號指定要存的比對結果改成 $content =~ /(i.*bugs)/i 試試看?
作者: doom8199 (~口卡口卡 修~)   2011-01-17 21:49:00
謝謝,原來要用()來賦值。 另外想問一下,若要把比對結果直接丟給 ($90,$91,$92) for example,而不從1~3開始存請問除了()暴力加89個外,有何簡便的寫法 >_<?
作者: clanguage (C語言)   2011-01-17 22:17:00
表示前面的資料你不需要 你要排除他,只抓出你需要的資料
作者: micangela (嘟)   2011-01-18 01:51:00
doom8199 這個應用很奇怪...若是為了可讀性想把比對到的值存在易於辨識的變數的話一個作法是在小括弧中指定名字再透過 %+ hash讀取例如 $content =~ /(?<my_name>i.*bugs)/比對結果會在變數 $+{my_name}中

Links booklink

Contact Us: admin [ a t ] ucptt.com