0%

java使用正则

文章字数:611,阅读全文大约需要2分钟

正则规则

  1. 任意字符可以表示匹配自身
  2. []代表匹配其中之一,如[abc]。意思是a,b,c任意一个都能满足。
  3. [1-9]/[a-z]是简写,代表1-9个数字,a-z的字母。
  4. ^在括号外代表开头,如^a,代表a开头的。括号内代表非,如[^abc]代表除了abc的任意字符
  5. .表示任意字符
  6. \d数字
  7. \D非数字
  8. \s空字符,等于[\t\n\r\x\f]
  9. \S非空字符,等于[^\s]
  10. \w字母,数字,下划线,等于[a-zA-Z0-9_]
  11. \W非字母,数字,下划线
  12. ?表示前一个元素出现0次或1次
  13. +表示前一个元素出现1次以上
  14. *表示前一个元素出现任意次
  15. {n}表示前一个元素出现n次
  16. {n,m}表示前一个元素出现n-m次
  17. {n,}表示前一个元素出现n或n以上
  18. 正则的两个元素的排列就是需要匹配的顺序,比如\d\s就是数字后面必须跟着非数字
  19. a|b匹配a或者b
  20. (子表达式)将内部当成一个原子整体。比如([1-9][a-z])+,代表数字和小写字母的组合出现一次以上。

检测字符串是否匹配正则

  1. 基本用法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 源字符串
    String str = "123";
    // 正则表达式
    String regex = "^[1-9]+";
    // 用正则创建Pattern对象,此对象就是正则表达式的对象,如果需要对此匹配,可以将此对象保存,避免重复创建。
    Pattern p = Pattern.compile(regex);
    // 检测字符串是否符合正则规则
    Matcher m = p.matcher(str);
    // 返回结果
    boolean res = m.matches();
  2. 使用Pattern类封装好的方法

    1
    2
    3
    String str = "123";
    String regex = "^[1-9]+";
    boolean res = Pattern.matches(regex, str);
  3. 使用String类封装好的方法

    1
    2
    3
    String str = "123";
    String regex = "^[1-9]+";
    boolean res = str.matches(regex);

正则替换

1
2
3
4
5
String str = "123abc";
String regex = "^[1-9]+";
System.out.println(str.replaceAll(regex, "&"));
System.out.println(str);
// 结果输出 &abc 和 123abc,代表替换结果不会对源字符串产生影响

正则切割

1
2
3
4
5
String str = "123a33b55h";
String regex = "[a-z]+";
String[] strs = str.split(regex);
// 输出
Arrays.stream(strs).forEach(System.out::println);

正则查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
public static void main( String[] args ){

// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(\\D*)(\\d+)(.*)";

// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);

// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
} else {
System.out.println("NO MATCH");
}
}
}