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. mysql优化技巧《转》

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  2. KMPlayer

    1. KMP 播放时,有声无图像,黑屏.解决: 打开KMP然后右键-选项-参数设置(或者进入KMP直接按F2)-视频处理-右边选择“渲染器”-在“渲染器”中选择“VMR9 未渲染 (HQ字幕)”-选中 ...

  3. js模块化编程总结

    大家都知道,js中的变量(variable)有其作用范围,比如:函数里用var定义的变量在函数外是看不到的,而定义在函数外面的变量(不能有没有var修饰)均是全局变量,在js程序的任何位置都可以访问. ...

  4. Python的lambda表达式

    使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python lambda会创建一个函数对象,但 ...

  5. TCP及IP报头及协议

    看到有道题目要问:tcp头多少字节?哪些字段?(必问) 这个... 看了这篇文章做参考:http://blog.163.com/tianshuai11@126/blog/static/61894543 ...

  6. 【HTML5 】<script>元素async,defer异步加载

    原文地址:HTML5′s async Script Attribute原文日期: 2010年09月22日翻译日期: 2013年08月22日 (译者注: 异步加载,可以理解为无阻塞并发处理.) (译者再 ...

  7. 转:c的回归-云风

    C 的回归 周末出差,去另一个城市给公司的一个项目解决点问题.回程去机场的路上,我用手机上 google reader 打发时间.第一眼就看到孟岩大大新的一篇:Linux之父话糙理不糙 .主题是 C ...

  8. Android控件_使用TextView实现跑马灯效果

    一.第一种方式: 通过TextView控件的自身属性实现(但是有缺点就是当多个TextView要实现这种效果的时候,只有第一个才有效果)  实现方法加上下面四个属性: android:singleLi ...

  9. 在Windows和Linux上安装paramiko模块

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  10. KD-tree

    就是K维空间上的二叉查找树. 每个node对应k维空间的超矩形区域 在方差最大的维度上,比较数据与kd-tree的根节点.中间节点,在该维度上的中值处划分,得到新的子空间,直到不能再分. 用于最近邻查 ...