首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网络接口匹配

网络接口匹配
EN

Stack Overflow用户
提问于 2012-01-31 06:34:23
回答 3查看 1.4K关注 0票数 0

我想要做的是给出一个类似如下的字符串:

代码语言:javascript
运行
复制
"hello GigabitEthernet1/13 mplampla"

要提取接口,例如:

代码语言:javascript
运行
复制
"GigabitEthernet1/13"

要提取前2个字符,然后提取端口号,例如:

代码语言:javascript
运行
复制
"Gi1/13"

我做错了什么?

代码语言:javascript
运行
复制
#!/usr/bin/perl     -w

use     strict ;
use     warnings ;

my $string = "hello GigabitEthernet1/13 mplampla" ;
$string =~ /(^[a-z]{2}*[0-9]\/*[0-9]*\/*[0-9]*)/ ;
print $string."\n" ;

PS。端口号可以类似于"Po4“、"TenGigabitEthernet2/0/0.13”等。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-31 06:47:18

一种方法:

代码语言:javascript
运行
复制
use     strict ;
use     warnings ;

my $string = "hello GigabitEthernet1/13 mplampla" ;
my @result = $string =~ /\s(\w{2})(?:\D*)(\d+\S*)/;
{
    local $" = qq[];
    print qq[@result\n];
}

正则表达式:

代码语言:javascript
运行
复制
\s                        # A space character.
(\w{2})                   # Two alphabetic characters. Save as group 1.
(?:\D*)                   # Any no-numeric characters. No save them.
(\d+\S*)                  # From first digit found until a space. Save as group 2.

用于打印:

代码语言:javascript
运行
复制
$"                  # It is the separator for array elements. It is set to a blank.
@result             # It is an array with grouped elements of the regular expression.
票数 2
EN

Stack Overflow用户

发布于 2012-01-31 06:47:34

您的正则表达式有几个问题--让我们逐个解决它们。

  1. 当在方括号之外使用^字符时,表示“行的开始”。因此,您已经告诉正则表达式引擎,您要查找的内容位于输入字符串的最开始,但这不是真的。所以去掉^

  1. ,通过使用[a-z],你已经明确告诉引擎只查找小写字母。您可以将其更改为[A-Za-z],也可以在最后一个斜杠后面添加一个i,以使您拥有的正则表达式case-insensitive.
  2. That first *的位置没有意义--我认为您的本意是将如下内容放在其位置:[a-z]* (表示0个或更多个字母)。

所以应用所有这些更改,下面是您的新正则表达式:

代码语言:javascript
运行
复制
/([a-z]{2}[a-z]*[0-9]\/*[0-9]*\/*[0-9]*)/i

该正则表达式将捕获GigabitEthernet1/13

编辑:这里是一个你可以尝试你的正则表达式的地方,看看它是如何响应变化的:

http://rubular.com/r/lsucbd8E4J

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 07:12:00

使用捕获组:

代码语言:javascript
运行
复制
$string =~ s|
        ^.*            # match beginning text (to be replaced)
        \b(\w{2})\w+   # capture the first two letters (in $1)
        (
          (?: \d+/? )+ # and one or more digits followed by 0 or 1 slashes,
                       # one or more times (in $2)
        )
        .*$            # match ending text (to be replaced)

    |$1$2|x;  # replace with only the contents of the capture groups
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9071839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档