簡體   English   中英

Perl正則表達式和參數

[英]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表示括號中的值。

請參閱以下問題以了解$1Perl中$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM