OID を解析して #18 を抽出しようとしていますが、ドットを区切り文字として使用して右から左にカウントするように記述する方法がわかりません。
1.3.6.1.2.1.31.1.1.1.18.10035
この正規表現は最後の値を取得します
my $ifindex = ($_=~ /^.*[.]([^.]*)$/);
必要な値を取得するために微調整する方法はまだ見つかりません。
どうですか:
my $str = "1.3.6.1.2.1.31.1.1.1.18.10035";
say ((split(/\./, $str))[-2]);
出力:
18
形式が常に同じである場合(つまり、常に右から2番目)、次のいずれかを使用できます。-
m/(\d+)\.\d+$/;
..そして答えは次のようになります:$1
または、別のアプローチは、文字列をドット上の配列に分割し、配列の最後から2番目の値を調べることです。
必要なものはもっと簡単です:
my $ifindex;
if (/(\d+)\.\d+$/)
{
$ifindex = $1;
}
いくつかのコメント:
^
使用する必要はありません.*
。最後にのみアンカーします。[.]
文字グループのマッチングを目的とした文字クラスです。たとえば、[abc]
a、b、または c のいずれかに一致します。単一の文字に一致する場合は避ける必要があります。代わりにその文字に一致するだけです。この場合、これは特殊文字であるため、エスケープする必要があります: \.
.\d+
は用語に使用しました。my $ifindex = ($_=~ /^.*[.]([^.]*)[.][^.]*$/);