0. 注意

  • 正则表达式里的点号(.),可以匹配除换行符之外的所有字符
  • Java 语言同其他语言中的正则表达式的不同在于:
    • 对 \(反斜线)的不同处理

      • \\:其他语言中,表示在正则表达式中插入普通的反斜线(字面上的),不要赋予它任何的意义;
      • 而在 Java 中,\\:我要插入一个正则表达式的反斜线(构成正则式),其后的字符具有特殊的意义;
        • \\d:表示一位数字;
    • \\+⇒ 加号,\\.⇒ 点;
  • 提取单词:\\W+(一个或多个字母)
  • 括号
    • 小括号:提取匹配的字符串,(\s*):匹配连续空格

      • (0-9) 匹配 0-9 本身,
      • [0-9]*:匹配数字,可以为空;
      • {1-9}:错误写法;
    • 中括号:定义匹配的范围,[a-zA-Z0-9] 相应位置匹配英文字符和数字,
      • [\s*]:表示匹配空格或星号;
    • 大括号,表示匹配的长度,\s{3}:匹配三个空格,\s[1, 3]:一到三个空格;

1. Java 中支持正则的类

  • String

    • str.matches(pattern):布尔判断,返回 true、false;

      • ’+911’.matches(‘(-|\+)?\d+’) ⇒ true,
      • ‘(-|\+)?\d+’ ⇒ 数字,以加号或者减号开头,或者没有任何符号;
      • 密码中必须包含至少一个数字(\\w*\\d\\w*):
      password.matches("\\w*\\d\\w*")
  • StringBuffer

  • StringTokenizer

2. 定义模式,完成模式(pattern)的匹配(match)

  • java.lang.String ⇒ java(去掉字符和点)

    Pattern p = Pattern.compile("\\w+\\.");
    p.match(str).replaceAll("");
    • \W+:表示非单词([^\w]\w: [a-zA-Z0-9]);

创建模式,进行匹配的步骤如下:

  • 使用 (static)Pattern.compile() 静态方法编译正则表达式,其会根据 String 类型的正则表达式生成一个 Pattern 对象,(Pattern 类是对 String 类在实现正则匹配等功能上的丰富与拓展)
  • 把你想要检索的字符串传入 Pattern 对象的 matcher() 方法,matcher() 方法会返回一个 Matcher 对象那个,其内有十分丰富的函数实现:

    // 我们实现对待检索的字符串 abcabcabcdefabc 的 (abc){2,} 模式的匹配
    
    Pattern p = Pattern.compile("abcabcabcdefabc");
    Matcher m = Matcher.match("(abc){2,}");
    // 迭代器,遍历和迭代进行
    while (m.find()) {
    System.out.println("Match \"" + m.group() + "\" at position "
    + m.start() + "-" + (m.end()-1));
    }

3. 对日志文件的扫描解析

如下形式的日志文件:

String logData = "" +
"58.27.82.161@02/10/2005\n" +
"204.45.234.40@02/11/2005\n";

逐行扫描,分别将其中的时间和 ip 提取出来。

String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+@)" +
"(\\d+{2}/\\d{2}/\\d{4})";
Scanner scanner = new Scanner(logData); // 创建对日志文件扫描的扫描器对象
while (scanner.hasNext(pattern)) {
scanner.next(pattern);
MatchResult m = scanner.match();
String original = m.group(0);
String ip = m.group(1);
String date = m.group(2);
System.out.format("%s: %s from %s\n", original, date, ip);
}

Java —— 正则表达式的更多相关文章

  1. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  2. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  3. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  4. 【转】详解Java正则表达式语法

    (转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...

  5. java正则表达式【大全】

    [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

  10. Java正则表达式实用教程

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...

随机推荐

  1. JavaScipt30(第十八个案例)(主要知识点:Array.prototype.map)

    承接上文,这是第十八个案例,中间的十到十八我直接看了答案,因为有些例子从他打开的页面看不出他要做什么. 附上项目链接: https://github.com/wesbos/JavaScript30 这 ...

  2. spring用来干什么,解决的问题

    // 1. 实体类 class User{ } //2. dao class  UserDao{ .. 访问db } //3. service class  UserService{ UserDao ...

  3. 17Web应用乱码问题

    Web应用乱码问题 Web应用乱码问题 简介 每个国家(或区域)都规定了本国家(或地区)计算机信息交换用的字符编码集,如美国的扩展ASCII码, 中国的GB2312-80,日本的JIS 等,作为该国家 ...

  4. gearman的安装与使用

    Gearman是一个分发任务的程序框架,它会对作业进行排队自动分配到一系列机器上.gearman跨语言跨平台,很方便的实现异步后台任务.php官方收录:http://php.net/manual/zh ...

  5. Eclipse添加背景图片

    ①前言:我本人是一个比较喜新厌旧的人,经常换头像,背景图片之类的,喜欢折腾,哈哈,所以每次都上网查怎么修改背景图片比较麻烦,这里也记录一下怎么修改. ②原文链接:https://yq.aliyun.c ...

  6. Jmeter学习笔记之逻辑控制器-Runtime Controller

    文章目录 Runtime Controller介绍 Runtime Controller 编辑界面 Once Only Controller介绍 Once Only Controller 配置界面 O ...

  7. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  8. codevs1314 寻宝

    题目描述 Description 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共 ...

  9. 又见GCD

    Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c.   Input ...

  10. P2626 斐波那契数列(升级版) 洛谷(2626)

    https://www.luogu.org/problem/show?pid=2626 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f ...