我正在尝试使用正则表达式将以下字符串拆分为正确的输出。答案不一定是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
答案 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]
。