public static final String POEM=
"Twas brilling, and the slithy toves\n" +
"Did gyre and gimble in the wabe.\n"+
"All mimsy were the borogoves,\n" +
"And the mome rathsoutgrable.\n\n"+
"Beware the Jabberwork, my son,\n"+
"The jaws that bite, the claws that catch.\n"+
"Beware hte Jubjub bird, and shun\n"+
"The frumious Bandersnatch.";
public static void main(String[] args) {
// TODO Auto-generated method stub
Matcher m= Pattern.compile("(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$")
.matcher(POEM);
while (m.find()) {
for (int j = 0; j <= m.groupCount(); j++) {
System.out.print("["+ m.group(j)+ "]");
}
System.out.println();
}
}

output:
[the slithy toves][the][slithy toves][slithy][toves]
[in the wabe.][in][the wabe.][the][wabe.]
[were the borogoves,][were][the borogoves,][the][borogoves,]
[the mome rathsoutgrable.][the][mome rathsoutgrable.][mome][rathsoutgrable.]
[Jabberwork, my son,][Jabberwork,][my son,][my][son,]
[claws that catch.][claws][that catch.][that][catch.]
[bird, and shun][bird,][and shun][and][shun]
[The frumious Bandersnatch.][The][frumious Bandersnatch.][frumious][Bandersnatch.]

解析:

m.groupCout():匹配器匹配的组的总数,不包括0组。

m.group(j):匹配的第j组的值。group(0)是整个表达式

(?m):多行模式

\S:非空白字符

\s:空白字符 ==[ \t\n\x0B\f\r]

2.Matcher.find() vs .lookingAt() vs .matchers()

package com.westward;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo31 {
public static String input=
"As long as there is injustice, whenever a\n"+
"Targathian baby cries out.wherever a distress\n" +
"signal sounds among the stars ... We'll be there.\n"+
"This fine ship, and this fine crew ...\n" +
"Never give up! Never surrender!"; private static class Display{
private boolean regexPrinted= false;
private String regex;
Display(String regex) {
this.regex= regex;
}
void display(String message){
if (!regexPrinted) {
System.out.println(regex);
regexPrinted = true;
}
System.out.println(message);
}
}
static void examine(String s,String regex){
Display d= new Display(regex);
Pattern p= Pattern.compile(regex);
Matcher m= p.matcher(s);
while (m.find()) {
d.display("find() '"+ m.group() +
"' start= "+m.start()+ " end= "+ m.end());
}
if (m.lookingAt()) {
d.display("lookingAt() '"+ m.group() +
"' start= "+m.start()+ " end= "+ m.end());
}
if (m.matches()) {
d.display("matches() '"+ m.group() +
"' start= "+m.start()+ " end= "+ m.end());
}
}
public static void main(String[] args) {
for (String in : input.split("\n")) {
System.out.println("input :"+ in);
for (String regex : new String[]{"\\w*ere\\w*",
"\\w*ever","T\\w+","Never.*?!"}) {
examine(in, regex);
}
}
}
}

output:
input :As long as there is injustice, whenever a
\w*ere\w*
find() 'there' start= 11 end= 16
\w*ever
find() 'whenever' start= 31 end= 39
input :Targathian baby cries out.wherever a distress
\w*ere\w*
find() 'wherever' start= 26 end= 34
\w*ever
find() 'wherever' start= 26 end= 34
T\w+
find() 'Targathian' start= 0 end= 10
lookingAt() 'Targathian' start= 0 end= 10
input :signal sounds among the stars ... We'll be there.
\w*ere\w*
find() 'there' start= 43 end= 48
input :This fine ship, and this fine crew ...
T\w+
find() 'This' start= 0 end= 4
lookingAt() 'This' start= 0 end= 4
input :Never give up! Never surrender!
\w*ever
find() 'Never' start= 0 end= 5
find() 'Never' start= 15 end= 20
lookingAt() 'Never' start= 0 end= 5
Never.*?!
find() 'Never give up!' start= 0 end= 14
find() 'Never surrender!' start= 15 end= 31
lookingAt() 'Never give up!' start= 0 end= 14
matches() 'Never give up! Never surrender!' start= 0 end= 31

总结:

Matcher.find():匹配字符串的任意位置

Matcher.lookingAt():匹配字符串的开始位置

Matcher.matchers():匹配整个字符串,String.matchers()底层就是调用的它。

3.Pattern标记 (Pattern的几个成员变量)

public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern p= Pattern.compile("^java", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher m= p.matcher(
"java has regex\nJava has regex\n"+
"JAVA has pretty good regular expressions\n"+
"Regular expressions are in Java");
while (m.find()) {
System.out.println(m.group(0));
// System.out.println(m.group());//the same
}
}

output:
java
Java
JAVA

总结:不同的Pattern标记可以用 或| 来连接。

Pattern.CASE_INSENSITIVE(?i):字母大小写不敏感

Pattern.MULTILINE(?m):多行模式

Thinking in java之正则表达式小例子的更多相关文章

  1. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  2. Java处理文件小例子--获取全国所有城市的坐标

    需求:前端展示数据,全国城市的坐标

  3. Java枚举的小例子

    有一次工作中,要根据多个参数确定一个值(车辆事件),确定一个值需要的参数大部分的属性名称是相同的,少部分是独有的,但是参数的值几乎都是不同的: 因为参数太多,if-else写起来就太不优雅了,可以参考 ...

  4. Java反射机制小例子

    package com.wjy.main; import java.io.Console; import java.lang.reflect.Constructor; import java.lang ...

  5. 验证java引用的小例子

    1. 声明一个变量person指向一个引用对象, 然后将这个person添加到集合list中, 然后将变量person指向null, 问:list中添加的person变成null了吗? import ...

  6. Web服务器-正则表达式-小例子(3.1.2)

    @ 目录 1.邮箱 2.手机号码 关于作者 1.邮箱 import re def main(): email = input("请输入一个邮件地址:") ret = re.matc ...

  7. Java正则表达式匹配例子

    Java正则表达式匹配例子 package com.ibm.test; import java.util.regex.Matcher; import java.util.regex.Pattern; ...

  8. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  9. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

随机推荐

  1. 【Todo】单例模式各种实现方式及并发安全

    Java 40道面试题不错:http://www.tuicool.com/articles/VRVFZb 其中有一道题目: 单例模式的线程安全性 老生常谈的问题了,首先要说的是单例模式的线程安全意味着 ...

  2. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  3. jQuery DOM基础

    jQuery DOM基础 1.对元素内容的获取和修改: 表单用value(),普通元素用html()和text(). html()  html(value)设置和获取html内容,有html标签会自动 ...

  4. NSString / NSData / char* 类型之间的转换

    转自网络: NSString / NSData / char* 类型之间的转换 1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; ch ...

  5. [css] 认识margin

    原文链接http://www.zhangxinxu.com/wordpress/2009/08/css-margin%E7%9A%84%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80 ...

  6. php PDO链接SQL SERVER

    操作系统Windows7 apache 2.2 php php-5.4.45-Win32-VC9-x86 sqlserver 2008 下载SQLSRV32 https://www.microsoft ...

  7. [Selenium] 根据预期的日期格式,获取昨天的日期

    我们不必考虑当前时间是否是本月1号,"MM/dd/yyyy"日期格式可以更改.

  8. winScp 跳板机到服务器

    http://jingyan.baidu.com/article/454316ab6ffe1af7a7c03a31.html?qq-pf-to=pcqq.group

  9. Linux 命令速查

    学生信,Linux是最最基本的技能,要尽量将自己的工作平台转移到Linux,编程写脚本,这样会极大的提升工作效率,找工作时也不会太怂.Linux所有的任务都是通过命令来完成的,具有高度的统一性.Lin ...

  10. java 集合(Set2)

    TreeSet: 1.向TreeSet添加元素时 如果元素具有自然特性,那么就按照元素的自然顺序的特点进行排序储存. 如果不具备,就要实现Compareable接口中的compareTo() 方法. ...