Java中的 \ 具有特殊意义--所以\\d表示数字 普通的反斜杠\\\\
正则表达式在Java中的用法
String自带(底层也是Pattern)
1、boolean isMatch = "-1234.56".matches("-?\\d+");//false
//split 将字符串从正则表达式匹配的地方切开
2、String[] arrStr = "I am iron man".split("\\W+");//\\W表示非单词字符 I, am, iron, man
public String[] split(String regex, int limit)//limit控制模式应用的次数,参数非正则匹配最多,否则执行limit-1次
3、public String replaceFirst(String regex, String replacement)
public String replaceAll(String regex, String replacement)
匹配java.util.regex.Pattern
Pattern p = Pattern.complie(String regix);//根据传入的正则表达式编译得到模式
p.split(CharSequence,int);//int可选(匹配几次的意思int-1);==string.split
Matcher m = p.matcher(CharSequence toMatchStr);//传入待匹配的字符
Boolean isNext = m.find();//尝试查找与该模式匹配的输入序列的下一个子序列。
//重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列
Boolean isNext = m.find(int);
Boolean isAllMatch = m.matches();
//与 matches 方法类似,此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
Boolean isAllMatch = m.lookingAt();
String bingoStr = m.group();//返回匹配的串
m.reset(String);//替换掉p.matcher中传入的参数
Matcher的替换操作
public String replaceAll(String replacement)
public String replaceFirst(String replacement)//替换掉第一个匹配成功的部分
//渐进式替换 替换并把匹配到的位置之前的添加到sb后面
public Matcher appendReplacement(StringBuffer sb, String replacement)
//调用一次或多次appendReplacement后,用此方法把输入字符串余下的部分复制到sb
public StringBuffer appendTail(StringBuffer sb)
B | 指定字符B |
\xhh | 十六进制值为oxhh的字符 |
\uhhhh | 十六进制表示为oxhhhh的Unicode字符 |
\t | 制表符Tab |
\n | 换行符 |
\r | 回车 |
\f | 换页 |
\e | 转义(Escape) |
. | 任意字符 |
[abc] | 包含a、b、c的任何字符==a|b|c |
[^abc] | 除了a、b、c之外的任何字符 |
[a-zA-Z] | 从a到z或从A到Z的任何字符 |
[abc[hij]] | ==a|b|c|h|i|j |
[a-z&&[hij]] | 任意h、i、j(交集) |
\s | 空白符(空格、tab、换行、换页和回车) |
\S | 非空白符 |
\d | 数字[0-9] |
\D | 非数字[^0-9] |
\w | 词字符[a-zA-Z0-9] |
\W | 非词字符[^\w] |
XY | Y在X后面 |
X|Y | X或Y |
(X) | 捕获组,可以在表达式中用\i引用第i个捕获组 |
^ | 一行的起始 |
$ | 一行的结束 |
\b | 词的边界 |
\B | 非词的边界 |
\G | 前一个匹配的结果 |
A(B(C))D 组0是ABCD 1是BC 2是C
量词:描述一个模式吸收输入文本的方式
- 贪婪型:除非有其他的选项被设置,贪婪表达式会为所有可能的模式发现尽可能多的匹配
- 勉强型:用 ? 指定,匹配满足模式所需要的最少字符数
- 占有:(Java专属),用 + 指定 当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时可以回溯,占有型量词不会保存这些中间状态,因此可以防止回溯,被用于防止正则表达式失控,使正则表达式执行起来更有效
贪婪型 | 勉强型 | 占有型 | 如何匹配 |
X? | X?? | X?+ | 一个或零个X |
X* | X*? | X*+ | 零个或多个X |
X+ | X+? | X++ | 一个或多个X |
X{n} | X{n}? | X{n}+ | 恰好n次X |
X{n,} | X{n,}? | X{n,}+ | 至少n次X |
X{n,m} | X{n,m}? | X{n,m}+ | X至少n次,至多m次 |
(X若为表达式用括号括起来)如(abc)+ |
正则表达式--CharSequence(被CharBuffer、String、StringBuffer、StringBuilder实现)
interface CharSequence{
charAt(int i);
length()
subSequence(int start, int end);
toString();
}
构造函数
public static Pattern compile(String regex, int flags) flags可选表示的含义 可以用|使用多个
编译标记 | 效果 |
Pattern.CANON_EQ | 两个字符当且仅当它们的完全规范分解相匹配时,就认为它们是匹配的 |
Pattern.CASE_INSENSITIVE | 不区分大小写 |
Pattern.COMMENTS | 空格、注释(#)被忽略 COMMENTS (?x) 也可以启用注释模式 |
Pattern.DOTALL | 可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符 通过嵌入式标志表达式 (?s) 也可以启用 dotall 模式 |
Pattern.MULTILINE | 多行模式, 在多行模式中,表达式 ^ 和 $ 仅分别在行结束符前后匹配,或者在输入序列的结尾处匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾处匹配。(?m) |
Pattern.UNICODE_CASE | 启用 Unicode 感知的大小写折叠 指定此标志后,由 |
Pattern.UNXI_LINES | 启用 Unix 行模式。 在此模式中,.、^ 和 $ 的行为中仅识别 '\n' 行结束符。 |