Java - 正则表达式

package test.regexp;

import java.util.regex.Pattern;

/*
 * 1. . 匹配任何单个字符
 * t.b   --->   tab,t b,...
 * 
 * 2. [] 单个字符
 * t[aeo]b  --->  tab, teb, tob
 * 
 * 3. () 分组
 * t(a|e)b  --->  tab, teb
 * 
 * 4. |  或者
 * 
 * 5. $  结尾匹配
 * 6. ^  开始匹配    如果出现在 () [] 中表示否的意思
 * 
 * ---------------  范围  ---------------
 * 7. *  0个以上
 * 8. +  1个以上
 * 9. ?  0次或者1次
 * 10. {n} n次
 * 11. {n,} 至少n次
 * 12. {n, m} 至少n次,至多m次
 * 13. -  返回    0-9 数字    a-z  小写字母
 * 
 * ---------------  转义  ---------------
 * 14. \s  空白符号      用法一般为  "\\s"
 * 15. \S  非空白符
 * 16. \d  数字
 * 17. \D  非数字
 * 18. \w  字母    等同于[a-zA-Z_0-9]
 * 19. \W  非字母
 * 
 * 反斜线字符 ('\') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。
 * 因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配。
 * 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。
 * 可以在 非字母字符 前使用反斜线,不管该字符是否非转义构造的一部分。
 * 根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。
 * 因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。
 * 例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。
 * 字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。
 * 
 */

public class RegexpTest {

	public static void main(String[] args) {
		
//		String regStr1 = "tob";
//		System.out.println(regStr1.matches("t.b"));  // true
//		
//		String regStr2 = "toob";
//		System.out.println(regStr2.matches("t(.)(.)b"));  // true   括号分组
//		System.out.println(regStr2.matches("t[o|oo]b"));  // false  中括号只能匹配单个字符
//		System.out.println(regStr2.matches("t(o|oo)b"));  // true
		
//		String regStr3 = "hello world";
//		System.out.println(regStr3.matches("world$"));  // false
//		System.out.println(regStr3.matches("^hello"));  // false
//		System.out.println(regStr3.matches("hello world")); // true
//		System.out.println(regStr3.matches("^h(.*)d$"));  // true  以h开始d结束,中间有任意个字符
		
		String regStr4 = "/user/10404";
		String regPath = "/user/{id}";
//		System.out.println(regPath.matches(".+{\\w+}.*"));  // 语法错误
//		System.out.println(regPath.matches(".+\\{\\w+\\}.*")); // true  // \\{ 匹配{  \\w 匹配字符
//		regPath = regPath.replaceAll("\\{\\w+\\}", "(\\w+)");
//		System.out.println(regPath); // /user/(w+)
		
		regPath = regPath.replaceAll("\\{\\w+\\}", "(\\\\w+)");
		System.out.println(regPath);  // /user/(\w+)  // 形成正则表达式字符串
		System.out.println(regStr4.matches(regPath)); // true
		
		Pattern regPattern = Pattern.compile(regPath);
		Matcher matcher = regPattern.matcher(regStr4);
		System.out.println(matcher.matches());  // true
	}
}


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