如何创建一个捕获IP地址的正则表达式,后跟与该IP地址关联的值?

时间:2016-05-05 15:58:00

标签: php regex extract ip-address

我在一组节点上运行脚本作业,与该作业关联的日志为我提供了我试图用正则表达式解析的数据字符串。我尝试从我的链接https://regex101.com/r/jX9hW8/2中提取成功率为0%的所有节点的IP地址。我想要得到的就是

10.0.0.183
Success rate is 0 percent

如果我试图列出我尝试过的所有内容,我会整天待在这里,但似乎所有我接受的都是支架中的任何数字。

1 个答案:

答案 0 :(得分:1)

您可以使用

'~^\s*D\d+\.node\s+\(([\d.]+)\):(?:(?!^\s*(?:D\d+\.node|Success rate is)\s).)*^\s*Success rate is 0\b~ms'

请参阅regex demo

这个想法是使用一个驯化的贪婪令牌,它匹配除前导和尾随分隔符之外的任何文本。

  • ^\s*D\d+\.node\s+\(([\d.]+)\): - 前导分隔符,匹配:

    • ^ - 行的开头
    • \s* - 0+ whitespaces
    • D - 文字D
    • \d+ - 1+位数
    • \.node - aliteral string .node
    • \s+ - 1+空格
    • \( - (
    • ([\d.]+) - 第1组匹配1+位数或字面点
    • \): - 文字):
  • ^\s*Success rate is 0\b - 跟踪分隔符匹配

    • ^ - 开始行
    • \s* - 0+ whitespaces
    • Success rate is 0\b - 与整个单词匹配的字符序列Success rate is 0\b会阻止匹配03,例如。)

(?:(?!^\s*(?:D\d+\.node|Success rate is)\s).)*是一个驯化的贪婪标记,它匹配任何不是以下序列的起始字符的字符(.将匹配任何字符):   - ^\s* - 行开头,后跟0 +空格   - (?:D\d+\.node - D后跟1位数后跟.node   - | - 或   - Success rate is) - 文字字符串Success rate is   - \s - 空白