关于分裂字符串的正则表达式

时间:2014-04-14 17:35:00

标签: regex perl

我正在尝试使用正则表达式将以下字符串拆分为正确的输出。答案不一定是perl,但一般来说正则表达式很好:

用户名是必需的。 多字符串名称是可选的 随后是Uselessword,但应该被解析 其次是可选号码 遵循括号中的IP< > (必需)

String = username optional multistring name uselessword 45 <100.100.100.100>

输出应为:

Match 1 = username
Match 2 = optional multistring name
Match 3 = 45
Match 4 = 100.100.100.100

1 个答案:

答案 0 :(得分:0)

使用多个正则表达式可以更轻松地处理这类事情。这是一个例子:

my @arr = (
'username optional multistring name uselessword 45 <100.100.100.100>',
'username 45 <100.100.100.100>'
);

for(@arr){
    ## you can use anchor ^ $ here
    if(/(\S+) (.+?) (\d+) <(.+?)>/){
        print "$1\n$2\n$3\n$4\n";
    }

    ## you can use anchor ^ $ here
    elsif(/(\S+) (\d+) <(.+?)>/){
        print "$1\n$2\n\n$3\n";
    }
    print "==========\n";
}

第一个if块正在从输入中查找四个组。第二个街区正在寻找三个小组。

如果需要,可以使用[ ]+处理组之间的多个空格。

此外,如果需要,您可以根据首选字符(通常通过字符类(.+?))调整可选组[bla]

相关问题