A:字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 单个数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有 1=X || 0=X
X* X,零次或多次 0=X || 1+ =X
X+ X,一次或多次 1=X || 1+ =X
System.out.println("546984".matches("3+")); false
System.out.println("13".matches("3+")); false
System.out.println("3".matches("3+")); true
System.out.println("3333".matches("3+")); true
X{n} X,恰好 n 次 n=X
System.out.println("546984".matches("3{2}")); false
System.out.println("543384".matches("3{2}")); false
System.out.println("3333 ".matches("3{2}")); fasle
System.out.println("33".matches("3{2}")); true
X{n,} X,至少 n 次 [ ~ n=<X
X{n,m} X,至少 n 次,但是不超过 m 次 [) n=<X<=m
字符类
字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 (&&
)。并集运算符表示至少包含其某个操作数类中所有字符的类。交集运算符表示包含同时位于其两个操作数类中所有字符的类。
字符类运算符的优先级如下所示,按从最高到最低的顺序排列:
1 字面值转义 \x
2 分组 [...]
3 范围 a-z
4 并集 [a-e][i-u]
5 交集 [a-z&&[aeiou]]
Pattern类的重要方法:
public static Patterncompile(String regex,int flags):将给定的正则表达式编译到具有给定标志的模式中。
public Matchermatcher(CharSequence input):创建匹配给定输入与此模式的匹配器。
public static boolean matches(String regex, CharSequence input):编译给定正则表达式并尝试将给定输入与其匹配。
matcher的重要方法:
public boolean find():尝试查找与该模式匹配的输入序列的下一个子序列。
public boolean find(int start):重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
public int start():返回以前匹配的初始索引。
public int end():返回最后匹配字符之后的偏移量。
用Java正则去掉字符串中重复出现的字符:
abcde 顺序可以不一样,也就是去掉重复出现的字符
String str = "abcdeabcdeabcdeaaaaaadddddceeeeabcccccccacadaeec";
str = str.replaceAll(reg, "");
System.out.println(str);
str = str.replaceAll("(?s)(.)(?=.*\\1)", "");
(?s)(.)(?=.*\1)
(?s) 开启单行模式 DOTALL 让. 号匹配任意字符
(.) 任意字符 并捕获在第一组
(?=.*\1) 这是断言, 表示后面内容将是 任意个字符加上第一组所捕获的内容
这样子,如果这整个式子匹配到,表示,第一个捕获组内容在字符串中,至少出现两次,替换为 "" 空串.
进行 全局替换后, 整个字符串所出现的字符将不重复。