[问题] 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