1

我正在尝试解析 OID 并提取 #18,但我不确定如何编写它以使用点作为分隔符从右到左计数:

1.3.6.1.2.1.31.1.1.1.18.10035

此正则表达式将获取最后一个值

my $ifindex = ($_=~ /^.*[.]([^.]*)$/);

我还没有找到一种方法来调整它以获得我需要的价值。

4

4 回答 4

5

怎么样:

my $str = "1.3.6.1.2.1.31.1.1.1.18.10035";
say ((split(/\./, $str))[-2]);

输出:

18
于 2013-01-16T13:36:47.943 回答
3

如果格式始终相同(即始终从右数第二个),那么您可以使用:-

m/(\d+)\.\d+$/;

..答案最终会是:$1

或者另一种方法是将字符串拆分为点上的数组并检查数组中的倒数第二个值。

于 2013-01-16T13:38:25.053 回答
1

你需要的更简单:

my $ifindex;

if (/(\d+)\.\d+$/)
{
   $ifindex = $1;
}

一些评论:

  1. 您不需要匹配整个字符串,只需匹配您关心的部分。因此,无需锚定到开头^并使用.*. 只锚定到最后。
  2. [.]是一个字符类,用于匹配字符组。例如,[abc]将匹配 a、b 或 c。匹配单个字符时应避免;只需匹配该字符即可。在这种情况下,您确实需要对其进行转义,因为它是一个特殊字符:\..
  3. 根据您的示例,我假设所有术语都必须是数字。因此,我使用\d+了这些术语。
于 2013-01-16T13:35:45.833 回答
0
my $ifindex = ($_=~ /^.*[.]([^.]*)[.][^.]*$/);
于 2013-01-16T13:36:09.987 回答