我正在创建一个Ansible游戏,其中包括为CSF的配置文件添加特定的端口范围。
文件中的字符串如下所示:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960"
我需要一个匹配以“TCP_IN =”开头的行的正则表达式 IF 它已经不包含端口范围。例如。这应该匹配:
portrange = 3000:5000
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960"
但这不应该匹配:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960,3000:5000"
如果端口范围出现在字符串的开头或中间,则同样如此。
有办法做到这一点吗?
答案 0 :(得分:1)
你可以尝试这种基于正则表达式的负向前瞻:
\bTCP_IN\s+=\s+"(?![\d,:]*?\b3000:5000\b)[\d,:]+"
在python中使用:
regex = re.compile(ur'\bTCP_IN\s+=\s+"(?![\d,:]*?\b3000:5000\b)[\d,:]+"')
Regex不对端口进行任何验证,它只允许在输入中使用数字OR逗号或冒号。