【问题标题】:Regex - IP Address can be repeated with new line正则表达式 - IP 地址可以用新行重复
【发布时间】:2023-03-10 03:01:01
【问题描述】:

我想知道如何为每行匹配一个 IP 地址?

我已经尝试过了,但使用单个换行符处理单个 IP 地址。

^((([0-9]{1,3})\.?){4}\n?)$

样本数据:

35.24.74.12
22.54.12.23

测试网址:http://regex101.com/r/yW9xT7

结果更新

新的正则表达式:

/^(([0-9]{1,3}\.?){4})$/m

新结果(使用 php preg_match_all):

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(14) "123.234.123.21"
    [1]=>
    string(13) "232.123.21.42"
  }
  [1]=>
  array(2) {
    [0]=>
    string(14) "123.234.123.21"
    [1]=>
    string(13) "232.123.21.42"
  }
  [2]=>
  array(2) {
    [0]=>
    string(2) "21"
    [1]=>
    string(2) "42"
  }
}

新问题:

共有三场比赛。我只想要第一个结果。

【问题讨论】:

  • 我希望你也考虑过 IPv6 地址... :-)
  • @PeteVerdon Nope :) 暂时没有。现在只有 ipv4。

标签: regex


【解决方案1】:

您可以将此正则表达式与m flag (multiline) 一起使用:

^([0-9]{1,3}\.){3}[0-9]{1,3}$

【讨论】:

  • 每个ip地址只能换行。
  • 是的,这将期望每行一个 IP
  • 没有任何IP地址的新行怎么办?想想用户在没有输入任何内容的情况下按了几次 Enter 键?
  • 这些行将不匹配。如果您提供有问题的示例输入输出和预期输出,我可能会更好地理解它。
  • 我正在使用 symfony 验证器插件。在我的 validation.yml 规则中,可以使用正则表达式模式进行设置。我现在的模式就是这样。 /^((([0-9]{1,3})\.?){4})$/gm
【解决方案2】:

试试这个:

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

【讨论】:

  • 这不是我想要的。您的答案只是用某些规则控制 IP 地址。对不起。
【解决方案3】:

你忘记转义点了。这也是你如何避免最后的点。

^(([0-9]{1,3}\.){4}[0-9]{1,3})$

更合适的正则表达式只接受 0 到 255 之间的数字,如下所示:

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

这给出了:

^(([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])$

为了匹配多行,您可以重复上述内容,并在每次重复之间添加新行,如下所示:

^((([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])[\r\n]+)*(([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])$

【讨论】:

  • 感谢您的建议,但我只想知道如何让它与多行一起工作。
  • 只使用最后一行。
  • 不。甚至无法捕获任何IP地址。
猜你喜欢
  • 2014-05-17
  • 2022-12-08
  • 2011-06-20
  • 2017-03-15
  • 2015-11-22
  • 1970-01-01
相关资源
最近更新 更多