[問題] regex 字串擷取

看板Perl作者 (~口卡口卡 修~)時間11年前 (2012/11/17 12:23), 編輯推噓2(209)
留言11則, 3人參與, 最新討論串1/1
版上各位先進好,小弟最近在自學 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,但不知為何官網把它撤掉) 麻煩各位先進解惑 >_< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.65.45

11/17 13:32, , 1F
要用小括號指定要存的比對結果
11/17 13:32, 1F

11/17 13:32, , 2F
改成 $content =~ /(i.*bugs)/i 試試看?
11/17 13:32, 2F

11/17 21:49, , 3F
謝謝,原來要用()來賦值。 另外想問一下,若要把比對結果
11/17 21:49, 3F

11/17 21:51, , 4F
直接丟給 ($90,$91,$92) for example,而不從1~3開始存
11/17 21:51, 4F

11/17 21:52, , 5F
請問除了()暴力加89個外,有何簡便的寫法 >_<?
11/17 21:52, 5F

11/17 22:17, , 6F
表示前面的資料你不需要 你要排除他,只抓出你需要的資料
11/17 22:17, 6F

11/18 01:51, , 7F
doom8199 這個應用很奇怪...
11/18 01:51, 7F

11/18 01:54, , 8F
若是為了可讀性想把比對到的值存在易於辨識的變數的話
11/18 01:54, 8F

11/18 01:55, , 9F
一個作法是在小括弧中指定名字再透過 %+ hash讀取
11/18 01:55, 9F

11/18 01:56, , 10F
例如 $content =~ /(?<my_name>i.*bugs)/
11/18 01:56, 10F

11/18 01:57, , 11F
比對結果會在變數 $+{my_name}中
11/18 01:57, 11F
文章代碼(AID): #1Gfn51Bg (Perl)