我正在尝试解析 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
如果格式始终相同(即始终从右数第二个),那么您可以使用:-
m/(\d+)\.\d+$/;
..答案最终会是:$1
或者另一种方法是将字符串拆分为点上的数组并检查数组中的倒数第二个值。
你需要的更简单:
my $ifindex;
if (/(\d+)\.\d+$/)
{
$ifindex = $1;
}
一些评论:
^
并使用.*
. 只锚定到最后。[.]
是一个字符类,用于匹配字符组。例如,[abc]
将匹配 a、b 或 c。匹配单个字符时应避免;只需匹配该字符即可。在这种情况下,您确实需要对其进行转义,因为它是一个特殊字符:\.
.\d+
了这些术语。my $ifindex = ($_=~ /^.*[.]([^.]*)[.][^.]*$/);