首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl -一个非常特殊的字符串的Regex

Perl -一个非常特殊的字符串的Regex
EN

Stack Overflow用户
提问于 2014-08-20 10:03:36
回答 1查看 118关注 0票数 0

提到我的nftables项目,我还有一个非常特殊的问题。我需要在标记的部分中拆分下面的字符串。

实际投入:

代码语言:javascript
复制
ip daddr foo.com tcp flags == ack counter limit rate 5/second accept

应在以下各部分分开:

代码语言:javascript
复制
['ip', 'daddr', 'foo.com'] ['tcp' 'flags', '== ack'] ['counter limit rate 5/second accept']

其他一些东西可以是:

代码语言:javascript
复制
tcp flags & (ack, syn, fin) == (ack, syn) drop

分头行动

代码语言:javascript
复制
 ['tcp', 'flags', '& (ack | syn | fin) == (ack | syn)'] ['drop']

诀窍是,我需要每个小部分中的第一、第二和第三部分作为一个数组,最后一个计数器等作为一个正常的字符串。

我创建这些Regexes就是为了做到这一点。

代码语言:javascript
复制
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不包含任何内容。我怎么才能解决这个问题?我希望你能帮我,因为我不知道继续..。非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 17:27:58

好的,我有另一个解决我的问题的想法:你怎么看这个:第一次检查和子字符串所有的动作从字符串。第二步运行语句-regex。

我稍后会测试它,如果这个方法有效的话,我会给你一个答复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25401967

复制
相关文章

相似问题

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