【问题标题】:Regular expressions for proxy pattern代理模式的正则表达式
【发布时间】:2012-07-24 19:01:17
【问题描述】:

从文本垃圾列表中,我正在使用正则表达式。以下将完成解析代理模式的工作
(\d{1,3}\.){3}\d{1,3}:\d{2,5}。但是这种模式会像这样解析文本:

692.248.222.879:43780
692.83.47.579:43780

这是不可能的 IP 地址。我想知道,如何使用正则表达式跳过这种范围?

我更喜欢的工具:Java 或 C#、notepad++。但是任何语言都可以。

【问题讨论】:

  • 为什么要用正则表达式来做这件事?最好将此类逻辑(检查有效性)封装在应用程序的某个方法中,而不是复杂的正则表达式。
  • 由于notepad++比我的java代码快,我更喜欢这个!

标签: java regex proxy notepad++


【解决方案1】:

试试这个:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b:\d{2,5}

'

692.248.222.879:43780 
692.83.47.579:43780
192.168.1.1:27052

仅适用于最后一个

【讨论】:

  • 它确实有效。但既然我已经有了这么多的选择,那么对于这个结果还有其他更短的正则表达式吗?
  • @William.Ebe,我不这么认为。你真的需要做很多测试,即使一开始看起来很简单。所以 - 最好的办法是使用一些经过测试和制造的专用工具 - 正如 minitech 在他的回答中提到的那样。
【解决方案2】:

要使用正则表达式验证数字范围,您必须提供所有可能的组合,这就是为什么通常最好使用内置工具,例如 .NET 的 IPAddress.TryParse。不过不管怎样……

((?:1?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:1?\d{1,2}|2[0-4]\d|25[0-5]):\d{2,5}

【讨论】:

  • 感谢 .Net 库参考;上面的代码没有完全解析。它选择 692.248.222.879:43780 进入 92.248.222.879:43780。无论如何,再次感谢!
  • @William.Ebe:我现在正在尝试它并没有......但无论如何,只需在前面添加一个 (?<!\d) 并在末尾添加一个 (?!\d) 即可它与其他数字中间的任何内容都不匹配。
【解决方案3】:
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$:\d{2,5}";

Proof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多