【问题标题】:Regex.Replace for IP address正则表达式。替换 IP 地址
【发布时间】:2012-08-16 00:25:24
【问题描述】:

我从互联网上的某个地方提取了一段代码,看起来像这样

 ip = Regex.Replace(ip, @"^(?<Prefix>(\d{1,3}\.){3})\d{1,3}$", "${Prefix}*");

它的作用是获取一个 IP 地址并用星号替换最后一部分。例如192.168.0.1 将变为192.168.0.*

我对 RegEx 毫无用处,我试图了解上述实际在做什么,但没有任何成功。

我追求的是另外 2 个 Regex.Replace 代码,以便 192.168.0.1 变为

  • 192.168.*.*
  • 192.*.*.*

谁能帮帮我?

【问题讨论】:

  • 哇,我想是编辑把事情搞砸了。但是,它说明了如果这些字符位于反引号或代码块内,则无需转义它们。编辑:它似乎已被后来的编辑修复。
  • 对我来说,找到句点和子字符串的最后一个索引要容易得多。或倒数第二个句点和子字符串。
  • 所以你想把 192.168.0.1 变成 3 个不同的字符串,每个字符串都有 1,2 和 3 个从末尾加星标的段?另外,你想用什么语言来实现这一点? C?
  • 应该\d[1,3]\d{1,3}

标签: regex replace ip


【解决方案1】:

192.168.*.* = ip = Regex.Replace(ip, @"^(?&lt;Prefix&gt;(\d{1,3}\.){2})\d{1,3}\.\d{1,3}$", "${Prefix}*.*");

192.*.*.* = ip = Regex.Replace(ip, @"^(?&lt;Prefix&gt;(\d{1,3}\.))\d{1,3}\.\d{1,3}\.\d{1,3}$", "${Prefix}*.*.*");

试一试,看看会发生什么。

【讨论】:

  • 谢谢约翰,我对上述问题有一点问题,但我认为可以通过编辑或转义原始问题中的字符来完成。 Regex.Replace(ip, @"^(?(\d{1,3}\.){2})\d{1,3}\.\d{1,3}$", "$ {前缀}*.*") Regex.Replace(ip, @"^(?(\d{1,3}\.))\d{1,3}\.\d{1,3} \.\d{1,3}$", "${前缀}*.*.*")
猜你喜欢
  • 1970-01-01
  • 2011-06-20
  • 2017-03-15
  • 2015-11-22
  • 2013-02-21
  • 2020-10-30
相关资源
最近更新 更多