`

java正则表达式用法举例

    博客分类:
  • Java
阅读更多
java正则表达式真难用啊, 这里整理一个java正则表达式用法举例, 比较全, lookingAt()方法比较变态, 备忘
public class PatternTest {
    public static void main(String[] args) {
        /*
         * 常用的调用
         */
        Pattern p1 = Pattern.compile("a*b");
        String str1 = "aaaab";
        Matcher m1 = p1.matcher(str1);
        boolean b1 = m1.matches();
        System.out.println(b1);

        String str2 = "b";
        Matcher m2 = p1.matcher(str2);
        boolean b2 = m2.matches();
        System.out.println(b2);
        /*
         * 另一种调用
         * 等效于上面的语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
         * 但它可供多个并发线程安全使用,而上面的调用则就不是安全的.
         */
        boolean b3 = Pattern.matches("a*b", "aaab");
        System.out.println(b3);

        // Pattern类的pattern方法:从pattern类的实例中返回匹配模式的字符串表示
        String pattern1 = p1.pattern();
        System.out.println(pattern1);

        // Pattern类的split方法
        String[] arr1 = p1.split("rrrrraaabccccaaaaab");
        for (String string : arr1) {
            System.out.println(string + ">>>>");
        }
        /*
         * Matcher类
         * matches方法: 方法尝试将整个输入序列与该模式匹配
         * lookingAt方法: 尝试将输入序列从头开始与该模式匹配,与 matches 方法类似,
         * 此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
         * find方法: 方法扫描输入序列以查找与该模式匹配的下一个子序列
         */
        String str3 = "aabbcccaaaaaeeeaaaaaaaaagggga";
        Pattern p3 = Pattern.compile("a+");
        Matcher m3 = p3.matcher(str3);
        boolean bo4 = m3.matches();
        System.out.println("matches方法:  " + bo4);
        /*
         * lookingAt方法,从开头第一个字符进行匹配,匹配成功了不再继续匹配,
         * 从第一个字符开始,匹配失败了,也不继续匹配.不需要匹配整个序列
         */
        boolean bo5 = m3.lookingAt();
        if (bo5) {
            // group方法(不带参数)返回的就是匹配的子字符串.
            System.out.println("lookingAt方法:  " + m3.group());
        }

        Pattern p4 = Pattern.compile("b+");
        Matcher m4 = p4.matcher(str3);
        boolean bo6 = m4.lookingAt();
        if (bo6) {
            // group方法(不带参数)返回的就是匹配的子字符串.
            System.out.println("lookingAt方法:  " + m3.group());
        }

        // find方法:找到一个匹配的子串,还会继续找下一个子串.
        while (m3.find()) {
            System.out.println("find方法:  " + m3.group());
        }
        /*
         * 带参数的group方法与不带参数的group方法区别
         * 不带参数的group方法:find方法与lookingAt方法匹配出来的子序列(上面有演示)
         * 带参数的group方法: 返回在以前匹配操作期间由给定组捕获的输入子序列。
         */
        String str6 = "aaabbbccc";
        Pattern p5 = Pattern.compile("(a+)(b+)(c+)");
        Matcher m5 = p5.matcher(str6);
        boolean boo = m5.matches();
        if (boo) {
            int k = m5.groupCount() + 1;// 加1就是把0下标的整个字符序列加上,它也作为一组放在0下标的位置.
            if (k > 0) {
                for (int i = 0; i < k; i++) {
                    System.out.println(m5.group(i));
                }
            }
        }
    }
}


分享到:
评论
4 楼 2047699523 2015-04-19  
java正则表达式相关demo源代码下载:http://www.zuidaima.com/share/k%E6%AD%A3%E5%88%99-p1-s1.htm
3 楼 RednaxelaFX 2009-12-08  
night_stalker 写道
怎么用? 我实现了一个 gsub 但是觉得效率可能有点问题
http://scalagroup.group.iteye.com/group/topic/16496

http://www.iteye.com/problems/29463 << 这样……这API看起来也不咋 =_=
2 楼 night_stalker 2009-12-08  
RednaxelaFX 写道
……话说还有一种可以用正则的地方是在一个字符串里有多处满足某模式的子串,我们希望对这些字串做替换,但每个字串替换的内容未必相同(例如可能加上自增量的编号之类)……


怎么用? 我实现了一个 gsub 但是觉得效率可能有点问题
http://scalagroup.group.iteye.com/group/topic/16496
1 楼 RednaxelaFX 2009-12-08  
啊……话说还有一种可以用正则的地方是在一个字符串里有多处满足某模式的子串,我们希望对这些字串做替换,但每个字串替换的内容未必相同(例如可能加上自增量的编号之类),Java的正则API也支持该功能,但用起来也是很不爽……

Matcher.appendReplacement()和Matcher.appendTail()就行,问题是它接收的参数是StringBuffer,想换用StringBuilder都不行

相关推荐

    Java正则表达式的使用实例

    Java正则表达式的使用实例Java正则表达式的使用实例;关于url、电话等字符串的判断

    精通正则表达式~~~

    使用正则表达式匹配文本... 38 向更实用的程序前进... 40 成功匹配的副作用... 40 错综复杂的正则表达式... 43 暂停片刻... 49 使用正则表达式修改文本... 50 例子:公函生成程序... 50 举例:修整股票价格....

    Oracle数据库正则表达式使用场景代码实例

    例如判断一个手机号码输入是否正确,如果使用Java、C或者其他语言进行字符串进行判断,也许写几十行代码都不一定能解决,而且漏洞百出,而使用正则表达式,一行代码则可轻易解决,下面是举例说明正则表达式的用法: ...

    J2EE开发全程实录(JAVA项目开发)

    1.2.1 正则表达式中元字符的用法... 4 1.2.2 Java中的正则表达式API 5 1.2.3 java.util.regex的使用... 6 1.3 实战正则表达式... 8 第2章 程序最优化.... 14 2.1 空间与时间... 14 2.1.1 空间与时间的概念和度量... ...

    算法-第4版-完整版

    5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的 5.5 数据压缩 ...

    算法 第4版-谢路云译-带完整书签

    5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的NFA 522 5.5 数据压缩 ...

    算法 第4版 高清中文版

    5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的 5.5 数据压缩 529 5.5.1 ...

    Python 核心编程 第二版

    第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、 Web编程、数据库编程、扩展Python 和一些其他材料。  本书适合Python初学...

    《算法》中文版,Robert Sedgewick,塞奇威克

    5.4.1 使用正则表达式描述模式 5.4.2 缩略写法 5.4.3 正则表达式的实际应用 5.4.4 非确定有限状态自动机 5.4.5 模拟NFA的运行 5.4.6 构造与正则表达式对应的 5.5 数据压缩 5.5.1 游戏规则 5.5.2 读写二进制...

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    5.4.1 使用正则表达式描述模式 5.4.2 缩略写法 5.4.3 正则表达式的实际应用 5.4.4 非确定有限状态自动机 5.4.5 模拟NFA的运行 5.4.6 构造与正则表达式对应的NFA 5.5 数据压缩 5.5.1 游戏规则 5.5.2 读写二...

    疯狂JAVA讲义

    9.5.2 使用正则表达式 341 9.6 程序国际化 345 9.6.1 Java国际化的思路 346 9.6.2 Java支持的语言和国家 346 9.6.3 完成程序国际化 347 9.6.4 使用MessageFormat处理包含占位符的字符串 349 9.6.5 使用类文件...

    Python核心编程第二版(ok)

     7.9.1 方法(所有的集合方法)   7.9.2 方法(仅适用于可变集合)   7.9.3 操作符和内建方法比较   7.10 集合类型总结表   7.11 相关模块   7.12 练习   第8章 条件和循环   8.1 if语句  ...

    Python核心编程第二版

     7.9.1 方法(所有的集合方法)   7.9.2 方法(仅适用于可变集合)   7.9.3 操作符和内建方法比较   7.10 集合类型总结表   7.11 相关模块   7.12 练习   第8章 条件和循环   8.1 if语句  ...

    【02-数据类型与运算符】

     •使用Scanner类可以很方面地获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文 件、输入流、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接受文件...

    精通Qt4编程(第二版)源代码

    \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML 348 \14.1 DOM 348 \14.1.1 DOM入门 348 \14.1.2 使用DOM 348 \14.1.3 使用DOM写XML文件 352 \14.2 SAX 354 \...

    精通qt4编程(源代码)

    \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML 348 \14.1 DOM 348 \14.1.1 DOM入门 348 \14.1.2 使用DOM 348 \14.1.3 使用DOM写XML文件 352 \14.2 SAX 354 \14.3 基于流...

    PHP3程序设计

    9.1 正则表达式定义 129 9.1.1 方括号表达式 130 9.1.2 转义字符 130 9.2 POSIX风格的函数 131 9.2.1 ereg 和eregi 131 9.2.2 ereg_replace 和eregi_replace 132 9.2.3 Split 133 9.3 PERL风格函数 134 9.3.1 模式定...

    21天学通Oracle

    第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) ...

    电子书:MongoDB权威指南(中文版)

    454.1.1 指定返回的键 464.1.2 限制 464.2 查询条件 474.2.1 查询条件 474.2.2 OR 查询 474.2.3 $not 484.2.4 条件句的规则 494.3 特定于类型的查询 494.3.1 null 494.3.2 正则表达式 504.3.3 ...

Global site tag (gtag.js) - Google Analytics