Java正则表达式的模式匹配示例

package date0804.demo1;

import java.util.regex.Pattern;

public class RegularExpres {

	public static void main(String[] args) {
		//中括号只代表一位字符,*代表任意位,问号代表一位
		
		
		//匹配首字母为a,末尾字母为b的任意字符串
		boolean b1 = Pattern.matches("a*d", "aaaaad");
		
		//匹配首字母为a,末尾字母为b的中间为任意一个字符(包括空字符)的任意字符串
		boolean b2 = Pattern.matches("a?d", "ad");
		
		//匹配首字母为a,末尾字母为b,中间为a或b或c的任意字符串
		boolean b3 = Pattern.matches("a[abc]d", "abd");
		
		//匹配首字母为a,末尾字母为b,中间为排除a或b或c的任意字符串
		boolean b4 = Pattern.matches("a[^abc]d", "abd");
		
		//匹配a-z或A-Z任意字符
		boolean b5 = Pattern.matches("[a-zA-Z]", "a");
		
		//a-d,m-p
		boolean b6 = Pattern.matches("[a-dm-p]", "l");
		
		//d,e,f
		boolean b7 = Pattern.matches("[a-z&&[def]]", "d");
		
		//a-d,m-p
		boolean b8 = Pattern.matches("[a-dm-p]", "l");
		
		//digit
		boolean b9 = Pattern.matches("[0-9]", "?");
		
	}
}


package date0814.regrex;

import java.util.StringTokenizer;

/**
 * 正则表达式系列学习
 * @author zzw922cn
 *
 */
public class Test1 {

	public static void main(String[] args) {
		String str = "I am a good boy!";
		
		//分割字符串,方法一,使用StringTokenizer
		StringTokenizer stringTokenizer = new StringTokenizer(str," ");
		while(stringTokenizer.hasMoreElements()) {
			String nextToken = stringTokenizer.nextToken();
			System.out.println(nextToken);
		}
		
		//方法二,使用split分割
		/*
		 * 在Java中,\\表示要插入一个正则表达式的反斜线,所以其后的字符具有特殊意义
		 */
		String[] strings = str.split("\\s");
		for(String element:strings)
			System.out.println(element);
		
		//加深正则表达式,从下面的str中提取字符串I am a good boy!
		str="I-12am-4532a-2good213boy!";
		//下面的-?\\d+表示可能有一个负号,并且有至少一位数字
		strings = str.split("-?\\d+");
		for(String element:strings)
			System.out.println(element);
		
		
		
	}
}





package date0814.regrex;
/**
 * 字符串的模式匹配
 * @author zzw922cn
 *
 */
public class Test2 {

	public static void main(String[] args) {
		//下面来看一下正则表达式的匹配
		System.out.println("-123".matches("-?\\d+"));
		System.out.println("123".matches("-?\\d+"));
		System.out.println("+123".matches("-?\\d+"));
		System.out.println("+123".matches("(-|\\+)?\\d+"));
		
		//下面来一个难一点的,分割段落中的所有单词
		String line="Well,,you have found the biggest school!You must look for such school in the future..."+
		"with such a beatiful garden——SunGarden.I am serious!!!";
		//下面这个正则表达式分割,!,.——,\n,空格中的任意一项的一个或多个,+表示>=1个
		String regex="(,+|\\!+|\\.+|\\——+|\n+|\\s+)";
		String[] strings = line.split(regex);
		for(String element:strings)
			System.out.println(element);
		System.out.println("共"+strings.length+"个单词");
		
		//或者用现有的\\W来分割非单词字符,\\w表示分割一个单词字符
		regex="\\W+";
		strings = line.split(regex);
		for(String element:strings)
			System.out.println(element);
		System.out.println("共"+strings.length+"个单词");
		
		//\\w表示分割一个单词字符,+号表示分割一个或多个单词字符,也就是说对下面的line分割过后只剩下非单词字符了
		//[,? ,! !.]三个元素
		regex="\\w+";
		line="I,?am,!zzw!.";
		strings = line.split(regex);
		for(String element:strings)
			System.out.println(element);
		
		
		
	}
}



package date0814.regrex;

public class Test3 {

	public static void main(String[] args) {
		//下面来把一个句子中的所有标点符号替换成_
		String line="Well,,you have found the biggest school!You must look for such school in the future..."+
		"with such a beatiful garden——SunGarden.I am serious!!!";
		//下面这个正则表达式分割,!,.——,\n,空格中的任意一项的一个或多个,+表示>=1个
		String regex="(,+|\\!+|\\.+|\\——+|\n+|\\s+)";
		String replaceAll = line.replaceAll(regex, "_");
		System.out.println(replaceAll);
	}
}



package date0814.regrex;

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

/**
 * 正则表达式字符及字符类的学习
 * @author zzw922cn
 *
 */
public class Test4 {

//	/**
//	 *  \xhh 十六进制值为0xhh的字符
//	 *  \\uhhhh 十六进制表示为0xhhhh的Unicode字符
//	 *  \t 制表符Tab
//	 *  \n 换行符
//	 *  \r 回车
//	 *  \f 换页
//	 *  \e 转义
//	 *  
//	 *  . 任意字符
//	 *  [abc] abc的任何字符
//	 *  [^abc] 除abc以外的任何字符
//	 *  [a-zA-Z] 从a到z或从A到Z的任意字符
//	 *  [abc[hij]] 任意abchij的字符,即合并作用
//	 *  [a-z&&[hij]] 表示a-z与hij的交集中的任意一个字符,即hij中的任意字符
//	 *  \s 空白符(包括空格,Tab,换行,换页,回车)
//	 *  \S 非空白符([^\s])
//	 *  \d 数字([0-9])
//	 *  \D 非数字([^0-9])
//	 *  \w 词字符 ([a-zA-Z0-9])
//	 *  \W 非词字符 [^\W]
//	 *  
//	 *  XY Y跟在X后面
//	 *  X|Y X或Y
//	 *  (X) 捕获组,可以在表达式中引用\i引用第i个捕获组
//	 *  ^ 一行的起始
//	 *  $ 一行的结束
//	 *  \b 词的边界
//	 *  \B 非词的边界
//	 *  \G 前一个匹配的结束
//	 */
	public static void main(String[] args) {
		//提取1,strt,4
		String line="<br>a=1;b=strt;c=4</br>";
		String regex1="<[/a-zA-Z]+>";
		line = line.replaceAll(regex1, "");
		System.out.println(line);
		
		String regex="[abc]=";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(line);
		while(matcher.find()) {
			System.out.println(matcher.group()+"从"+matcher.start()+"到"+matcher.end());
		}
		
	}
}



package date0814.regrex;

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

public class Test5 {

	public static void main(String[] args) {
		String str="abcdabcdabcd";
		//要打括号
		String regex="(abcd)+";
		System.out.println(str.matches(regex));
		
		//使用Pattern来编译正则表达式
		Pattern pattern = Pattern.compile("abcd+");
		Matcher matcher = pattern.matcher(str);
		while(matcher.find()) {
			System.out.println(matcher.start()+"——"+matcher.end());
		}
	}
}


package date0814.regrex;

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

public class Test7 {

	public static void main(String[] args) {
		String str="Java now has regular expressions";
		//匹配Java开头的句子,后面可以跟任意内容
		String[] regx={
				"\\breg.*",
				"^Java",
				"n.w\\s+h(a|i)s",
				"s?",
				"h*",
				"s+",
				"s{4}",
				"s{1}.",
				"s{0,3}"
		};
		for(int i=0;i<regx.length;i++) {
			Pattern compile = Pattern.compile(regx[i]);
			Matcher matcher = compile.matcher(str);
			while(matcher.find()) {
				System.out.println(matcher.group());
			}
		}
		
	}
}



package date0814.regrex;

import java.util.regex.Pattern;

public class Test8 {

	public static void main(String[] args) {
		//如何匹配a^nb^n呢
		
		// ?x 表示空格符被忽略
		// 
		Pattern p = Pattern.compile("(?x)(?:a(?= a*(\\1?+b)))+\\1");
		// true
		System.out.println(p.matcher("aaabbb").matches());
		// false
		System.out.println(p.matcher("aaaabbbb").matches());
		// false
		System.out.println(p.matcher("aaabbbb").matches());
		// false
		System.out.println(p.matcher("caaabbb").matches());
		
	}
}



package date0814.regrex;

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

public class Test9 {

	public static void main(String[] args) {
		
		final String POEM="This was boring,and the slightly\n"
				+ "good boys are here running\n"
				+ "haha  i don't want to say anything\n";
		/*
		 *  ?m表示多行模式下,^ $分别表示一行的开始和结束,而在默认环境下,仅匹配完整字符串的开头或结尾
		 *  \\S 匹配任意字母或数字
		 *  + 表示多个
		 *  \\s 匹配任意空白符
		 *  + 表示多个
		 *  因此下面这个正则表达式表示一行的结尾的三个单词
		 */
		Pattern pattern = Pattern.compile("(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$");
		Matcher matcher = pattern.matcher(POEM);
		while(matcher.find()) {
			for(int j=0;j<matcher.groupCount();j++) {
				System.out.print("["+matcher.group(j)+"]");
			}
			System.out.println();
		}
	}
}



package date0814.regrex;

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

public class Test10 {

	public static void main(String[] args) {
		String s="/*!I am a good boy!*/";
		Pattern pattern = Pattern.compile("(?s)/\\*!(.*)!\\*/");
		Matcher matcher = pattern.matcher(s);
		while(matcher.find()) {
			System.out.print(matcher.group());
		}
	}
}




你可能感兴趣的:(正则表达式)