Java 正则表达式

Java 正则表达式, 可以用 “简洁而强大” 来形容!

Java 正则表达式, 存在于 java.util.regex 包中, 是到 JDK 1.4 才引入的, 仅包含上面两个类, 和一个异常类.

  • Pattern (模式类) 正则表达式的编译形式, 用来表达和陈述所要搜索模式的对象.
  • Matcher (匹配器类) 通过解释正则模式, 在字符串上执行模式匹配的引擎, 是真正影响搜索的对象.

Pattern

生成 Pattern 对象

生成 Pattern 对象只有一种方法, 就是调用其静态方法 compile.

1
2
static Pattern compile(String regex)
static Pattern compile(String regex, int flags)

Matcher

生成 Matcher 对象

生成 Matcher 对象只有一种方法, 就是调用 Pattern 对象的成员方法 matcher.

1
Matcher matcher(CharSequence input)

Java 正则表达式

预定义字符集

  • \p{Lower}=[a-z]
  • \p{Upper}=[A-Z]
  • \p{ASCII}=[\x00-\x7F]
  • \p{Alpha}=[\{Lower}\p{Upper}]
  • \p{Digit}=[0-9]
  • \p{Alnum}=[\p{Alpha}\p{Digit}]
  • \p{Punct}=[!"#$%&'()*+,-./:;<=>?@[\]^_{|}~]`
  • \p{Graph}=[\p{Alnum}\p{Punct}]
  • \p{Print}=[\p{Graph}\x20]
  • \p{Blank}=[\t\x20]
  • \p{Space}=[\t\n\v\f\r\x20]
  • \p{Cntrl}=[\x00-\x1F\x7F]
  • \p{XDigit}=[0-9a-fA-F]
  • \p{javaLowerCase} 各种语言的小写字母, 远远比 \p{Lower}
  • \p{javaUpperCase} 各种语言的大写字母, 远远比 \p{Upper}
  • \p{javaWhitespace} 各种空白字符, 远远比 \p{Space} 多, 还包括中文的空白
  • \p{P} 各种语言的标点符号, 远远比 \p{Punct}
  • \p{Ps} 开始括号
  • \p{Pe} 结束括号
  • \p{Pi} 开始引号
  • \p{Pf} 结束引号
  • \p{Pc} 连接字符
  • \p{Pd} 虚线字符
  • \p{Po} 其他字符
  • \p{S} 符号
  • \p{Z} 分隔符

这里附上字符集检查代码

filterByPattern
1
2
3
4
5
6
7
8
private void filterByPattern(Pattern p) {
for (int i = 0; i < 65536; i++) {
char c = (char) i;
if (p.matcher(c + "").matches()) {
System.out.println(String.format("%d\t%s", i, c));
}
}
}

常用工具方法

提取符合 Pattern 模式的字符串

用于提取符合模式的字符串, 或者说, 提取有用信息.

extract
1
2
3
4
5
6
7
8
public static List<String> extract(Pattern p, String str) {
List<String> rs = new ArrayList<String>();
Matcher m = p.matcher(str);
while (m.find()) {
rs.add(m.group());
}
return rs;
}

判断字符串是否包含 Pattern 模式

用于字符串模式查找.

hasMatch
1
2
3
public static boolean hasMatch(Pattern p, String str) {
return p.matcher(str).find();
}

判断字符串是否符合 Pattern 模式

用于字符串模式校验

isMatch
1
2
3
public static boolean isMatch(Pattern p, String str) {
return p.matcher(str).matches();
}

参考文献

Henry wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!