Regex 如果字符串包含某个字符串,如何使用正则表达式忽略这些字符串
我正在尝试使用正则表达式扫描一些日志文件。特别是,我希望挑选出符合此格式的行: IP地址或随机数“禁止”,例如“111.111.111.111禁止”或“0320932禁止”,等等 只能有两组字符(数字/IP地址和“禁止”。单词之间或之前可能有多个空格),字符串也不应包含“客户端”、“私人”或“请求”。在大多数情况下,我只是对如何检测字符组和避免包含这些单词的字符串感到困惑Regex 如果字符串包含某个字符串,如何使用正则表达式忽略这些字符串,regex,bash,text,Regex,Bash,Text,我正在尝试使用正则表达式扫描一些日志文件。特别是,我希望挑选出符合此格式的行: IP地址或随机数“禁止”,例如“111.111.111.111禁止”或“0320932禁止”,等等 只能有两组字符(数字/IP地址和“禁止”。单词之间或之前可能有多个空格),字符串也不应包含“客户端”、“私人”或“请求”。在大多数情况下,我只是对如何检测字符组和避免包含这些单词的字符串感到困惑 感谢您可能提供的任何帮助以下内容将起作用: \s*\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d\s*bann
感谢您可能提供的任何帮助以下内容将起作用:
\s*\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d\s*banned\s*
以下工作将起作用:
\s*\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d\s*banned\s*
我假设在以下输入数据中,应该删除第1行和第3行: 111.111.111.111 banned. 2.2.2.2 wibble 0320932 banned 1434324 wobble
此正则表达式匹配1个或多个数字和句点,后跟1个或多个空格,后跟单词“禁止”。将
-v
传递给grep将导致它显示所有与正则表达式不匹配的行。将-i
添加到grep
命令中,使其不区分大小写。我假设在以下输入数据中应删除第1行和第3行:
111.111.111.111 banned.
2.2.2.2 wibble
0320932 banned
1434324 wobble
此正则表达式匹配1个或多个数字和句点,后跟1个或多个空格,后跟单词“禁止”。将-v
传递给grep将导致它显示所有与正则表达式不匹配的行。将-i
添加到grep
命令中,使其不区分大小写。尝试此RegExp
String regex = "\\d+.\\d+.\\d+.\\d+ banned.";
在这里,您可以过滤这两种字符串
示例:
public static void main(String[] args) {
System.out.println("start");
String src = "657 hi tis is 111.111.111.111 banned. 57 happy i9";
//String src = "87 working is 0320932 banned. Its ending str 08";
String regex = "\\d+.\\d+.\\d+.\\d+ banned.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(src);
while(matcher.find()){
System.out.println(matcher.start() + " : " + matcher.group());
}
}
如果它不适合您,请告诉我。试试这个RegExp
String regex = "\\d+.\\d+.\\d+.\\d+ banned.";
在这里,您可以过滤这两种字符串
示例:
public static void main(String[] args) {
System.out.println("start");
String src = "657 hi tis is 111.111.111.111 banned. 57 happy i9";
//String src = "87 working is 0320932 banned. Its ending str 08";
String regex = "\\d+.\\d+.\\d+.\\d+ banned.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(src);
while(matcher.find()){
System.out.println(matcher.start() + " : " + matcher.group());
}
}
如果它不适合您,请告诉我。您想要一个否定匹配,如下所示:
/^((?!([\d.\s]+banned\.)).)*$/
在行动中看到它:
注意您的示例显示了
禁用后的句点。如果不需要,请从表达式中删除\.
。您需要一个否定匹配,如下所示:
/^((?!([\d.\s]+banned\.)).)*$/
egrep -v '^ *[0-9]+((\.[0-9]+){3})? +banned\.$'
在行动中看到它:
注意您的示例显示了禁用后的句点。如果不需要,请从表达式中删除\.
egrep -v '^ *[0-9]+((\.[0-9]+){3})? +banned\.$'
- 允许在行首使用可选的前导空格
- 必须后跟全数字序列或类似IP的地址
- 必须后跟至少一个空格
- 行必须以“禁止”结尾
- 最后,
-v
选项确保只返回与正则表达式不匹配的行李>
有了这些约束条件,您就不必担心排除诸如“client”之类的附加词
- 允许在行首使用可选的前导空格
- 必须后跟全数字序列或类似IP的地址
- 必须后跟至少一个空格
- 行必须以“禁止”结尾
- 最后,
-v
选项确保只返回与正则表达式不匹配的行李>
有了这些约束条件,您就不必担心排除诸如“client”之类的附加词
试图匹配IP地址或随机数“禁止”。
这个egrep
应该适合您:
egrep '(([0-9]{1,3}\.){3}[0-9]{1,3}|[0-9]+) +banned' logfile
试图匹配IP地址或随机数“禁止”。
这个egrep
应该适合您:
egrep '(([0-9]{1,3}\.){3}[0-9]{1,3}|[0-9]+) +banned' logfile
此答案有太多问题,无法在评论中列出所有问题。你真的应该在发布解决方案之前测试它们。这个答案有太多问题,无法在评论中列出它们。在发布解决方案之前,您确实应该测试它们。