标题非常自我解释......
我的正则表达式仍然不完美,但在改进之前我需要解决2个问题......
我可以通过ip:port获取所有行,但我不知道如何:
该文本文件的示例:
junk text junk text junk text junk text junk text junk text junk text
junk text 127.0.0.1:28 junk text junk text junk text junk text junk text
junk text junk text junk text junk 127.0.0.1:28text junk text
junk text junk text junk text 127.0.0.1:28 junk text
junk text junk text junk text
junk text 127.0.0.1:28 junk text
junk text
junk text 127.0.0.1:28 junk text
junk text 127.0.0.1:28 junk text junk text
junk text junk text junk text 127.0.0.1:28 junk text
junk text junk text junk text junk text junk text
junk text junk text junk text 127.0.0.1:28 junk text junk text junk text
junk text junk text 127.0.0.1:28 junk text junk text junk text junk text junk text
我期待着回来:
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
127.0.0.1:28
显然该示例使用相同的ip:port line但我不希望它是固定值。
是否可以使用单个正则表达式请求执行此操作?
......作为一个起点我试过:
^(?!.*[09].*).+$
答案 0 :(得分:1)
您可以使用(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)
匹配并捕获IP,然后您可以使用(?:(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+).)*
tempered greedy token匹配任何未启动类似子字符串的IP文本。
查找内容:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)|(?:(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+).)*
如果您在模式开始时添加(?s)
,则无需检查 .
匹配换行符选项。
要仅使用找到的IP替换,可以使用条件替换模式添加换行符:
(?{1}$1\n:)
如果匹配+换行符,它将替换匹配的组1值(IP),否则匹配将替换为空字符串。