【问题标题】:How to write a regex of IP and exclude specific IP如何编写 IP 正则表达式并排除特定 IP
【发布时间】:2017-03-15 18:33:35
【问题描述】:

我需要验证应遵循 IPv4 代理模式的字符串。 但是 0.0.0.0(...) 是不允许的

0.0.0.0/23(not match)
0.0.0.0/0(not match)
12.2.3.4/23(match)
13.2.3.53(match)

目前我有正则表达式来匹配(IP 和 IP 代理)

(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\/\d+)?

但是我怎么能排除 0.0.0.0 或 0.0.0.0/...

【问题讨论】:

  • ^(?!0\.0\.0\.0/)开始你的正则表达式
  • ...除非正则表达式引擎不支持环视。
  • 那么您在这里使用的是哪个正则表达式引擎?
  • 在 bash 环境中@Jan
  • 如何添加“AND”排除环视。我尝试了 (?!(0\.0\.0\.0)) 和 ^(?!0\.0\.0\.0/) 这不起作用,我可能会犯语法错误@anubhava

标签: regex regex-negation regex-lookarounds regex-group


【解决方案1】:

使用gnu grep,您可以使用负前瞻:

grep -P '^(?!0\.0\.0\.0/)(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\/\d+)?' file
12.2.3.4/23(match)
13.2.3.53(match)

否则,您可以像这样使用awk 排除0.0.0.0

awk -F/ '$1 != "0.0.0.0"' file

12.2.3.4/23(match)
13.2.3.53(match)

【讨论】:

  • 我可以将它们组合成一个正则表达式吗?我的实际环境是杨模块。这与 bash 正则表达式类似。但是不支持awk
  • 是的,我也提供了一个带有单个正则表达式的 gnu grep
  • 谢谢你,(?!0\.0\.0\.0(\/\d+)?)(([0-9]|[1-9][0-9] |1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9] [0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\/\d+)?似乎对我有用
猜你喜欢
  • 2017-10-02
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多