正则表达式

2017/01/04 Java

常见规则

字符

  • x 字符 x。举例:’a’表示字符a
  • \ 反斜线字符。
  • \n 新行(换行)符 (‘\u000A’)
  • \r 回车符 (‘\u000D’)

字符类

  • [abc] a、b 或 c(简单类)
  • [^abc] 任何字符,除了 a、b 或 c(否定)
  • [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
  • [0-9] 0到9的字符都包括

预定义字符类

  • . 任何字符。我的就是.字符本身,怎么表示呢? .
  • \d 数字:[0-9]
  • \w 单词字符:[a-zA-Z_0-9]
    • 在正则表达式里面组成单词的东西必须由这些东西组成

边界匹配器

  • ^ 行的开头
  • $ 行的结尾
  • \b 单词边界
    • 就是不是单词字符的地方。
    • 举例:hello world?haha;xixi

Greedy 数量词

  • X? X,一次或一次也没有
  • X* X,零次或多次
  • X+ X,一次或多次
  • X{n} X,恰好 n 次
  • X{n,} X,至少 n 次
  • X{n,m} X,至少 n 次,但是不超过 m 次

常见功能

判断功能

String类的public boolean matches(String regex)

// 模式和匹配器的典型调用顺序
// 把正则表达式编译成模式对象
Pattern p = Pattern.compile("a*b");
// 通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串
Matcher m = p.matcher("aaaaab");
// 调用匹配器对象的功能
boolean b = m.matches();
System.out.println(b);

//这个是判断功能,但是如果做判断,这样做就有点麻烦了,我们直接用字符串的方法做
String s = "aaaaab";
String regex = "a*b";
boolean bb = s.matches(regex);

分割功能

String类的public String[] split(String regex)

String s3 = "aa    bb                cc";
String[] str3Array = s3.split(" +");

替换功能

String类的public String replaceAll(String regex,String replacement)

String s = "helloqq12345worldkh622112345678java";

// 我要去除所有的数字,用*给替换掉
// String regex = "\\d+";
// String regex = "\\d";
//String ss = "*";

// 直接把数字干掉
String regex = "\\d+";
String ss = "";

String result = s.replaceAll(regex, ss);

获取功能

Pattern和Matcher

// 定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 规则
String regex = "\\b\\w{3}\\b";

// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串

while (m.find()) {
	System.out.println(m.group());
}

// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);

以上概念总结于传智播客Java基础课程

Search

    Post Directory