`
ihuashao
  • 浏览: 4666685 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

正则表达式(一)

阅读更多

最近在论坛里问正则表达式的特别多,我对这方面了解的也不是很多,也就是顺便学习学习。还是引用论坛里的一个问题吧:如何将下面这段字符串分离出IP地址,连接时间和链接。

  1. 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的正则表达式了:

  1. Stringregex="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";

当然了你也可以再仔细观察一下,其实IP地址的前3个字节和“.”都可以写在一起:

  1. Stringregex="(\\d{1,3}\\.){3}\\d{1,3}";

再看看如何匹配连接时间的匹配吧,有了前面的经验,自然知道挨个的去匹配:

  1. Stringregex="\\d{2}/[A-Z][a-z]+/\\d{4}:\\d{2}:\\d{2}:\\d{2}\\s-\\d{4}";

但是仔细观察还是可以利用我们前面提到的一个特点,就是在"["开始之后,只要没有遇到"]",那么这之前的都是属于时间的。如果这么理解的话,表达式就可以写的很简洁了:

  1. Stringregex="[^\]]+";

好了有了上面的经验,那么写起匹配链接的正则表达式就会容易的多了:

  1. Stringregex="/[^\"]+";

那么现在就可以合并起来了,这个的代码如下:

  1. importjava.util.regex.*;
  2. publicclassLogAnalyze{
  3. publicstaticvoidmain(Stringargs[]){
  4. 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";
  5. Stringregex="(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s-\\s-\\s\\[([^\\]]+)\\]\\s\"GET\\s(/[^\"]+)\"\\s";
  6. Patternpattern=Pattern.compile(regex);
  7. Matchermatcher=pattern.matcher(str);
  8. while(matcher.find()){
  9. System.out.println("IP:\n"+matcher.group(1));
  10. System.out.println("Time:\n"+matcher.group(2));
  11. System.out.println("Site:\n"+matcher.group(3)+"\n");
  12. }
  13. }
  14. }

运行的结果是:

  1. IP:
  2. 65.55.210.14
  3. Time:
  4. 01/May/2007:00:00:26-0500
  5. Site:
  6. /estil.strawnHTTP/1.0
  7. IP:
  8. 71.86.225.114
  9. Time:
  10. 23/May/2007:11:39:29-0500
  11. Site:
  12. /healthlink.cssHTTP/1.1

当然了,你也可以把那一个正则表达式分开写,然后依次匹配出IP地址,连接时间和链接。

分享到:
评论

相关推荐

    正则表达式转换工具

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    Java使用正则表达式提取XML节点内容的方法示例

    为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...

    qt使用正则表达式限制lineEdit的输入,对正则表达式进行了封装,可以直接引入,工程编译正常

    在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...

    pb 使用正则表达式源码pbregexp

    正则表达式是一种模式匹配语言,它允许开发者用简洁的语法来描述一组字符串的共同特征。在PowerBuilder中,pbregexp组件提供了一个接口,使得开发者可以方便地在PB脚本中使用正则表达式功能。这个组件可能包含以下...

    VC、VC++,MFC 正则表达式类库

    在这个场景下,正则表达式是一个非常重要的工具,用于处理和分析文本数据。正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则...

    正则表达式 一个关于正则表达式的基础文件

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和验证字符串。它通过一套特定的语法,即正则表达式规则,来定义字符串的特征模式。在本篇文章中,我们将深入探讨正则表达式的基础知识及其应用。 1. ...

    C语言正则表达式库

    PCRE2-10.31是该库的一个具体版本,包含了一系列头文件和库文件,使得开发者可以在自己的C程序中集成正则表达式支持。 正则表达式是一种强大的文本模式匹配工具,它能用来检查一个字符串是否符合某种预定义的模式。...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    正则表达式大全 - 收集的最常用正则表达式

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...

    正则表达式必知必会v_1.0.pdf

    正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许用户根据不同的规则来...

    正则表达式详解正则表达式详解

    - `+`:匹配前面的表达式一次或多次。 - `?`:匹配前面的表达式零次或一次。 - `[abc]`:匹配字符集合中的任意一个字符(如'a'、'b'或'c')。 - `[a-zA-Z]`:匹配所有大写和小写字母。 - `[0-9]`:匹配所有数字...

    使用正则表达式验证一年的12个月份

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...

    正则表达式验证工具,正则表达式校验工具

    3、选择排除规则,一、按正则表达式把源码中符合正则的删除;二、按正则表达式把源码中符合正则的找出;三、符合正则表达式的显示True 4、选择是否不区分大小写(RegexOptions.IgnoreCase),单行模式...

    java正则表达式.zip

    Pattern类是Java正则表达式的起点,它将一个正则表达式编译成一个模式对象。这个编译过程可以优化后续的匹配操作。例如,创建Pattern对象的代码如下: ```java Pattern pattern = Pattern.compile("正则表达式"); `...

    易语言正则表达式文本替换

    例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...

    正则表达式 必知必会 pdf

    正则表达式作为一种文本处理工具,在计算机编程和数据处理领域中扮演着极其重要的角色。它不仅适用于几乎所有编程语言和计算机平台,而且能够执行复杂的文本搜索、匹配、替换和提取操作。正则表达式的核心是通过定义...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...

    正则表达式大全.docx

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地定义要查找的模式。以下是一些常见的正则表达式模式及其用途: 1. ...

Global site tag (gtag.js) - Google Analytics