提到我的nftables项目,我还有一个非常特殊的问题。我需要在标记的部分中拆分下面的字符串。
实际投入:
ip daddr foo.com tcp flags == ack counter limit rate 5/second accept应在以下各部分分开:
['ip', 'daddr', 'foo.com'] ['tcp' 'flags', '== ack'] ['counter limit rate 5/second accept']其他一些东西可以是:
tcp flags & (ack, syn, fin) == (ack, syn) drop分头行动
['tcp', 'flags', '& (ack | syn | fin) == (ack | syn)'] ['drop']诀窍是,我需要每个小部分中的第一、第二和第三部分作为一个数组,最后一个计数器等作为一个正常的字符串。
我创建这些Regexes就是为了做到这一点。
if ($inrule =~ /^\s*([a-z]+\s+[a-z]+\s+[=!<>]{0,2}\s+([A-Za-z0-9._-]+|\{[A-Za-z0-9._\s-]+\\})\s+)+[A-Za-z0-9._\/\s-]+$/ )
{
my ($actions) = $inrule =~ /\s*(((log\s(prefix\s\"[0-9A-Za-z]\")?)|
(counter)|
(set\s[0-9A-Za-z.-_])|
(limit\srate\s[1-9]{1}[0-9]*\/(second|minute|hour|day|week){1}))\s*)*
\s*(drop|return|reject|accept)?$/gx;
my @rulecontent = ( $inrule =~ /([a-z]+\s+[a-z]+\s+[=!<>]{0,2}\s+([A-Za-z0-9._-]+|\{[A-Za-z0-9._\s-]+\\})/g );
print @rulecontent;
print $actions;
}问题是:@rulecontent包含正确的输入,$actions不包含任何内容。我怎么才能解决这个问题?我希望你能帮我,因为我不知道继续..。非常感谢。
发布于 2014-08-20 17:27:58
好的,我有另一个解决我的问题的想法:你怎么看这个:第一次检查和子字符串所有的动作从字符串。第二步运行语句-regex。
我稍后会测试它,如果这个方法有效的话,我会给你一个答复。
https://stackoverflow.com/questions/25401967
复制相似问题