最近在论坛里问正则表达式的特别多,我对这方面了解的也不是很多,也就是顺便学习学习。还是引用论坛里的一个问题吧:如何将下面这段字符串分离出IP地址,连接时间和链接。
-
Stringstr="doctor_access_log.1177977600:65.55.210.14--[01/May/2007:00:00:26-0500]\"GET/estil.strawnHTTP/1.0\"4041400671.86.225.114--[23/May/2007:11:39:29-0500]\"GET/healthlink.cssHTTP/1.1\"2001799";
凭观察我们能发现这个字符串里的IP有:65.55.210.14和71.86.225.114;连接时间有01/May/2007:00:00:26 -0500和23/May/2007:11:39:29 -0500; 链接有/estil.strawn HTTP/1.0和/healthlink.css HTTP/1.1。而且连接时间和链接有两个很明显的特征就是分别在"[]"和""""之间。下面来具体看看如何一一匹配。先来看如何匹配IP地址,这里只针对于IP V4的32bit的地址,他们都有一个共同的特征就是有4个字节,每个字节的十进制数是由[0-9]组成的(废话!),每个字节间都有"."分割。都知道在正则表达式中,\\d和[0-9]可以来表示数字;匹配的次数都是用量词(quantifier)来表示的,比如*或者+,也可以用具体的次数,比如{m,}就是表示最少匹配m次,{m,n}表示匹配m到n次。那么这样就能很容易的写出匹配IP的正则表达式了:
-
Stringregex="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
当然了你也可以再仔细观察一下,其实IP地址的前3个字节和“.”都可以写在一起:
-
Stringregex="(\\d{1,3}\\.){3}\\d{1,3}";
再看看如何匹配连接时间的匹配吧,有了前面的经验,自然知道挨个的去匹配:
-
Stringregex="\\d{2}/[A-Z][a-z]+/\\d{4}:\\d{2}:\\d{2}:\\d{2}\\s-\\d{4}";
但是仔细观察还是可以利用我们前面提到的一个特点,就是在"["开始之后,只要没有遇到"]",那么这之前的都是属于时间的。如果这么理解的话,表达式就可以写的很简洁了:
好了有了上面的经验,那么写起匹配链接的正则表达式就会容易的多了:
那么现在就可以合并起来了,这个的代码如下:
-
importjava.util.regex.*;
-
publicclassLogAnalyze{
-
publicstaticvoidmain(Stringargs[]){
-
Stringstr="doctor_access_log.1177977600:65.55.210.14--[01/May/2007:00:00:26-0500]\"GET/estil.strawnHTTP/1.0\"4041400671.86.225.114--[23/May/2007:11:39:29-0500]\"GET/healthlink.cssHTTP/1.1\"2001799";
-
Stringregex="(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s-\\s-\\s\\[([^\\]]+)\\]\\s\"GET\\s(/[^\"]+)\"\\s";
- Patternpattern=Pattern.compile(regex);
- Matchermatcher=pattern.matcher(str);
-
while(matcher.find()){
-
System.out.println("IP:\n"+matcher.group(1));
-
System.out.println("Time:\n"+matcher.group(2));
-
System.out.println("Site:\n"+matcher.group(3)+"\n");
- }
- }
- }
运行的结果是:
- IP:
-
65.55.210.14
- Time:
-
01/May/2007:00:00:26-0500
- Site:
-
/estil.strawnHTTP/1.0
- IP:
-
71.86.225.114
- Time:
-
23/May/2007:11:39:29-0500
- Site:
-
/healthlink.cssHTTP/1.1
当然了,你也可以把那一个正则表达式分开写,然后依次匹配出IP地址,连接时间和链接。
分享到:
相关推荐
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
正则表达式是一种模式匹配语言,它允许开发者用简洁的语法来描述一组字符串的共同特征。在PowerBuilder中,pbregexp组件提供了一个接口,使得开发者可以方便地在PB脚本中使用正则表达式功能。这个组件可能包含以下...
在这个场景下,正则表达式是一个非常重要的工具,用于处理和分析文本数据。正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和验证字符串。它通过一套特定的语法,即正则表达式规则,来定义字符串的特征模式。在本篇文章中,我们将深入探讨正则表达式的基础知识及其应用。 1. ...
PCRE2-10.31是该库的一个具体版本,包含了一系列头文件和库文件,使得开发者可以在自己的C程序中集成正则表达式支持。 正则表达式是一种强大的文本模式匹配工具,它能用来检查一个字符串是否符合某种预定义的模式。...
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许用户根据不同的规则来...
- `+`:匹配前面的表达式一次或多次。 - `?`:匹配前面的表达式零次或一次。 - `[abc]`:匹配字符集合中的任意一个字符(如'a'、'b'或'c')。 - `[a-zA-Z]`:匹配所有大写和小写字母。 - `[0-9]`:匹配所有数字...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...
3、选择排除规则,一、按正则表达式把源码中符合正则的删除;二、按正则表达式把源码中符合正则的找出;三、符合正则表达式的显示True 4、选择是否不区分大小写(RegexOptions.IgnoreCase),单行模式...
Pattern类是Java正则表达式的起点,它将一个正则表达式编译成一个模式对象。这个编译过程可以优化后续的匹配操作。例如,创建Pattern对象的代码如下: ```java Pattern pattern = Pattern.compile("正则表达式"); `...
例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...
正则表达式作为一种文本处理工具,在计算机编程和数据处理领域中扮演着极其重要的角色。它不仅适用于几乎所有编程语言和计算机平台,而且能够执行复杂的文本搜索、匹配、替换和提取操作。正则表达式的核心是通过定义...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地定义要查找的模式。以下是一些常见的正则表达式模式及其用途: 1. ...