[英]Perl regular expression and arguments
以下Perl示例是长Perl脚本的一部分。
该脚本从ifconfig -a
获取结果并打印IP地址。
有人可以解释$1
如何获得IP地址吗?
以及正则表达式是什么
$RESULTS =~ /addr:(\S+)\s+/
手段?
my $COMMAND = "ifconfig -a | grep inet | grep -v 127.0.0.1 | head -1";
my $RESULTS = `$COMMAND`;
chomp $RESULTS;
# inet addr:106.13.4.9 Bcast:106.13.4.255 Mask:255.255.255.0
# inet 106.13.4.9 netmask ffffff80 broadcast 106.13.4.127
if ( $RESULTS =~ /addr:(\S+)\s+/ ) {
$IpAddress = $1;
}
elsif ( $RESULTS =~ /inet\s+(\S+)\s+/ ) {
$IpAddress = $1;
}
print "IpAddress = $IpAddress\n";
如果=~
〜match表达式为true,则特殊变量$1
, $2
,...将是与括号中的模式部分匹配的子字符串。 $1
匹配第一个左括号, $2
匹配第二个左括号,依此类推。
\\S
匹配任何非空白字符,
+
匹配1次或多次,
\\s
匹配任何空格字符(空格,制表符,换行符),
因此,在您的正则表达式中,它与addr:(any non-whitespace character 1 or more time)matches any whitespace character one or more time
。 和$1
表示括号中的值。
请参阅以下问题以了解$1
: Perl中$ 1意味着什么?
=~
是perl中的matchs运算符,如果字符串(此处$RESULTS
)可以与正则表达式(此处为/addr:(\\S+)\\s+/
)匹配,则计算结果为true /addr:(\\S+)\\s+/
在perl中匹配正则表达式时,将自动分配变量:
$&
保留与整个表达式匹配的部分 $1
持有与第一个捕获组(括号组)匹配的部分 $2
$1
, $2
, $&
等将捕获最后一次成功匹配的值。
\\S+
匹配任何值并取反\\s
(空格)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.