我正在尝试解析OID并提取#18但我不确定如何使用点作为分隔符来编写它从右到左计数:
1.3.6.1.2.1.31.1.1.1.18.10035
此正则表达式将获取最后一个值
my $ifindex = ($_=~ /^.*[.]([^.]*)$/);
我还没有找到一种方法来调整它以获得我需要的值。
答案 0 :(得分:5)
怎么样:
my $str = "1.3.6.1.2.1.31.1.1.1.18.10035";
say ((split(/\./, $str))[-2]);
<强>输出:强>
18
答案 1 :(得分:3)
如果格式始终相同(即始终从右起第二位),则可以使用: -
m/(\d+)\.\d+$/;
..答案最终将在:$1
或者另一种方法是将字符串拆分为点上的数组并检查数组中的倒数第二个值。
答案 2 :(得分:1)
您需要的更简单:
my $ifindex;
if (/(\d+)\.\d+$/)
{
$ifindex = $1;
}
几条评论:
^
锚定到开头并使用.*
。锚定到最后。[.]
是一个字符类,用于匹配字符组。例如,[abc]
将匹配a,b或c。匹配单个字符时应该避免;只是匹配那个角色。在这种情况下,您需要转义它,因为它是一个特殊字符:\.
。\d+
作为条款。答案 3 :(得分:0)
my $ifindex = ($_=~ /^.*[.]([^.]*)[.][^.]*$/);