马士兵 正则表达式的学习(补充)

none-capturing groups

特殊构造(非捕获)

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}");//三个字母
		String s = "44a66b";
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());//找到两个字串
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

44a
66b

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}(?=a)");//三个字母的后面出现一个a,不捕获a
		String s = "44a66b";
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());//显示不了
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

无任何显示信息

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}(?=a)");//三个字母的后面出现一个a,不捕获a
		String s = "444a66b";
		Matcher m = p.matcher(s);//捕获3个字母,不捕获a
		while(m.find()) {
			p(m.group());//显示不了
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

444

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile("(?=a).{3}");//符合条件就捕获,不符合条件就不捕获
		String s = "444a66b";
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

a66

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile("(?!a).{3}");//前面不能是a的
		String s = "444a66b";
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

444
66b

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}(?!a)");
		String s = "444a66b";//后面跟着的不是a
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

44a
66b

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}(?<!a)");//从后往前数不是a
		String s = "444a66b";//444从后往前不是a,a66从后往前不是a
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

444
a66

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//non-capturing groups
		Pattern p = Pattern.compile(".{3}(?<=a)");//从后往前数不是a
		String s = "444a66b";//444从后往前不是a,a66从后往前是a
		Matcher m = p.matcher(s);
		while(m.find()) {
			p(m.group());
		}
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

44a

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//back references向前引用
    	Pattern p=Pattern.compile("(\\d\\d)\\1");//  \\d\\d代表两个数字    \\1代表第一个组捕获的字符串
    	String s="1212";
    	Matcher m=p.matcher(s);
    	p(m.matches());
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

true

比较:

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//back references向前引用
    	Pattern p=Pattern.compile("(\\d\\d)\\1");//  \\d\\d代表两个数字    \\1代表第一个组捕获的字符串
    	String s="1213";
    	Matcher m=p.matcher(s);
    	p(m.matches());
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

false

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//back references向前引用
    	Pattern p=Pattern.compile("(\\d(\\d))\\2");//  两个组,看到一个左(是一个组!!!         2代表和第二个组匹配
    	String s="122";//第一个组是1  第二个组是2                  2和第二个组匹配
    	Matcher m=p.matcher(s);
    	p(m.matches());
    	}

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

true

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//flags的简写
    	Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//大写小忽略

    }

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

true

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {

    	//flags的简写
    	//Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//大写小忽略
    	p("Java".matches("(?i)(java)"));//以上的简写
    }

    public static void p(Object o) {
    	System.out.println(o);
    }
}

输出:

true

CASE_INSENSITIVE

public static final int CASE_INSENSITIVE
启用不区分大小写的匹配。

默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。可以通过指定 UNICODE_CASE 标志连同此标志来启用 Unicode 感知的、不区分大小写的匹配。

通过嵌入式标志表达式  (?i) 也可以启用不区分大小写的匹配。

指定此标志可能对性能产生一些影响。

另请参见:

(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off

不写就是关上,写了就是打开

时间: 2024-09-29 00:24:17

马士兵 正则表达式的学习(补充)的相关文章

马士兵 正则表达式的学习(上)

天气预报系统六天的面向对象的写法已经完成,代码也比较完善了.下一个任务就是获取7,8,9三天的天气情况,数据源来自http://www.haotq.com/d_anqing.html. 中国天气网的信息由于有JSON接口,所以直接用JSON解析即可,这个新数据源只能采用写个爬虫,抓取网页,进行解析才行.由于我需要的数据信息锁在DIV之中,所以我打算使用正则表达式进行解析,现在需要做的是好好学习一下正则表达式. 01正则表达式简介: 一个点对应一个字母: package com.zzk.cn; p

马士兵 正则表达式的学习(下)

10. replacement package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //字符串的替换 Pattern p=Pattern.compile("java",Pattern.CASE_INSENSIT

马士兵J2SE-第六章-常用类-基本数据类型包装类、Maths类、File类

基本数据类型包装类 public class test { public static void main(String[] args) { Integer i=new Integer(100); Double d=new Double("123.456"); int j=i.intValue()+d.intValue(); float f=i.floatValue()+d.floatValue(); System.out.println(j); System.out.println(

网络直播:8月10号马士兵老师在线java授课

问题描述 网络直播:8月10号马士兵老师在线java授课报名方式:1.报名请加QQ群:47275079或者加王老师QQ:287397423:张老师QQ:294845594:毕老师QQ:1073636327,远程教学为保证教学秩序,避免资源浪费,报名人员须注明真实姓名.网址:www.bjsxt.com培训内容:尚学堂在8月10号开设网络直播课堂"深入体验JavaSE开发系列课程",马士兵老师讲解的课程深受广大网友的喜爱,众多网友听完马老师讲解的Java课程后,纷纷强烈要求马士兵老师讲解更

求马士兵的BBS2209的源代码及视频,谢谢!

问题描述 求马士兵的BBS2009的视屏及源代码,没有视屏发源代码也行,谢谢,初学SSH框架,毕业论文也是BBS,想试着把这个项目融入自己的想法,为自己的大学划伤完美的句号!邮箱是137671131@Q.Q.com 解决方案 解决方案二:在电驴上有全系列的下载解决方案三:同求啊!1091371341@qq.com解决方案四:我是在电驴上下的,楼主看看还有没有,没有的话我再分享出来.解决方案五:电驴上好多了--解决方案六:同求啊,电驴没有啊,904448100@qq.com那位大神发一份给我,非常

最近几天把马士兵的 基础语法,面向对象视频看完, 感觉晕呼呼的

问题描述 哎呀小弟不才呀刚接触java最近几天把马士兵的基础语法,面向对象视频看完,感觉晕呼呼的大家帮找找方向 解决方案 解决方案二:这个是很基础的问题,如果这关过不了,以后的东西都不能进行,怎么谈方向啊,只有把基础学扎实了,后面才会好学,到时候,你再问这个问题也不迟啊?解决方案三:这个道理我也了解所以现在找基础呀,主要有没有学习的方法借鉴一下解决方案四:呵我正在看解决方案五:再看一遍就过吧,自己编几个小代码,自己写代码要比看教程印象深.加油,和你一起奋斗在java的战线上!解决方案六:引用2楼

javase-关于马士兵老师的坦克大战小程序为什么用了LIST容器来装炮弹还是只能一发一发的打

问题描述 关于马士兵老师的坦克大战小程序为什么用了LIST容器来装炮弹还是只能一发一发的打 主窗口TankClient.java代码如下:import java.awt.*;import java.awt.event.*;import java.util.List;import java.util.ArrayList; public class TankClient { public static void main(String[] args) { new MyFrame(""Tan

马士兵上的struts的问题各位大神指导解决!

问题描述 我刚学马士兵struts,里面的bbs2009,看着做但是发现最后的结果不一样,结果没有出来,初步看是没传到页面上.数据库已经是是有数据的.页面的list没有数据如下图:部分代码如下mysql的:publicclassDB{publicstaticConnectioncreateConn(){Connectionconn=null;try{Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnecti

java自学碰到一些困难-马士兵Java教学视频第101课时中碰到一些困难

问题描述 马士兵Java教学视频第101课时中碰到一些困难 马士兵Java教学视频中第101课时里面的Set方法举例,我按照里面的程序打结果出现了无法将类 Name中的构造器Name应用到给定类型s.add(new Name("f1","f2")); 本人自学Java啊,求高手教啊