【问题标题】:Regular expression to determine if the String consists of more than 4 numbers正则表达式确定字符串是否包含超过 4 个数字
【发布时间】:2019-03-27 06:30:08
【问题描述】:

我想从如下所示的日志中提取 URL 字符串:

3 月 27 日 11:22:38 144.0.116.31 AgentDevice=WindowsDNS AgentLogFile=DNS.log PluginVersion=X.X.X.X 日期=3/27/2019 时间=11:22:34 AM 线程 ID=11BC 上下文=PACKET 消息= 内部数据包标识符=0000007A4843E100 UDP/TCP 指示符=UDP 发送/接收指示符=Snd 远程 IP=X.X.X.X Xid(十六进制)=9b01 查询/响应=R Opcode=Q 标志(十六进制)=8081 标志(字符代码)=DR ResponseCode =NOERROR 问题类型=问题名称=outlook.office365.com

我正在寻找包含超过 5 位数字的名称文本。

建议的一种可能方法是(\d.*?){5,},但似乎不起作用,请建议另一种获取该字段的方法。

字符串匹配示例:

outlook12.office345.com outlook.office12345.com

【问题讨论】:

  • 你能从上面的示例文本中给出示例匹配项吗?
  • 我可能需要新眼镜,但那里没有abc12345...
  • 假设一个名称=12sskd345.google.com 我想获得 12sskd345.google.com
  • 所以你想获取 (Name=outlook.office365.com) 值名称属性。对吗?
  • 可以,但只有超过 5 位数字

标签: java python regex security


【解决方案1】:

您可以查找以下表达式:

Name=([^ ]*\d{5,}[^ ]*)

说明: Name= 查找以“Name=”开头的任何内容,而不是在以下情况下捕获: [^ ]* 任意数量的非空格字符 \d{5,} 然后连续 5 位数字 [^ ]* 再说一遍,所有数字都到一个空格

【讨论】:

    【解决方案2】:

    这个正则表达式:

    (?<=Name=).*\d{5,}.*?(?=\s|$)
    

    将从您的示例输入中提取 outlook.office365666.com 之类的字符串(具有 5 个或更多连续数字)。

    演示:https://regex101.com/r/YQ5l2w/1

    【讨论】:

      【解决方案3】:

      试试这个模式:(?=\b.*(?:\d[^\d\s]*){5,})\S*

      解释:

      (?=...) - 正向前瞻,确保其中的模式与前面某处匹配:)

      \b - 字边界

      (?:...) - 非捕获组

      \d[^\d\s]* - 匹配数字 \d,然后匹配零个或多个除空格 \s 或数字 \d 以外的任何字符

      {5,} - 匹配前面的模式 5 次或更多次

      \S* - 如果断言为真,则匹配零个或多个除空格以外的任何字符以匹配字符串,但我认为您只需要断言:)

      Demo

      如果您只想要连续的数字,请使用简化模式(?=\b.*\d{5,})\S*

      Another demo

      当然,您必须在后面添加肯定的lookbehind:(?&lt;=Name=) 来断言您前面有Name= 字符串

      【讨论】:

      • 这很好用。但这会变得非常昂贵。我可以做得更好,只找到这些数字连续出现的字符串吗?
      • 您的正则表达式将在空格后继续捕获:regex101.com/r/AMueUX/5,这似乎不适合 @VatsalyaYadav 的应用程序。
      • 嘿,它似乎不适用于regex101.com/r/JZvAHY/1@MichałTurczyn
      • @VatsalyaYadav 如果答案解决了您的问题,您应该接受它(左侧的绿色复选标记)并可选择投票。
      【解决方案4】:

      试试这个正则表达式

      ([a-z0-9]{5,}.[a-z0-9]{5,})+.com
      
      https://regex101.com/r/OzsChv/3
      

      它组,

      outlook.office365.com
      outlook12.office345.com
      

      还有所有的url字符串

      【讨论】:

      • 您的正则表达式与链接中的不匹配。它还会错误地匹配少于 5 位数字的字符串。并且 OP 没有表明字符串总是以 .com 结尾。
      • ([a-z0-9]{5,}.[a-z0-9]{5,})+.com 试试这个正则表达式。,
      猜你喜欢
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多