正则表达式
正则表达式应用https://blog.csdn.net/weixin_44149624/article/details/106949501
捕获组
表达式((A)(B(C)))有四个这样的组:
- ((A)(B( C)))
- (A)
- (B( C))
- ( C)
还有一个特殊的组(group(0)),它总是代表整个表达式(Matcher中不计入匹配数中)
表达式语法
符号 | 含义 |
---|---|
^ | 开始 |
$ | 结束 |
* | 零次或多次匹配前面的字符或子表达式 |
+ | 一次或多次匹配前面的字符或子表达式 |
? | 零次或一次匹配前面的字符或子表达式。若前面是其他限定符(*、+、?、{n}、{n,}、{n,m})则是非贪心模式 |
{n} | n 是非负整数。正好匹配 n 次 |
{n,} | 至少匹配 n 次 |
{n,m} | 匹配至少 n 次,至多 m 次 |
. | 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式 |
(?:pattern) | 匹配 pattern 但不捕获该匹配的子表达式 |
(?=pattern) | |
(?!pattern) | |
x|y | 匹配 x 或 y。例如,‘z|food’匹配"z"或"food"。’(z|f)ood’匹配"zood"或"food"。 |
[xyz] | 字符集,匹配包含的任一字符 |
[^xyz] | 反向字符集,匹配未包含的任何字符 |
[a-z] | 字符范围,匹配指定范围内的任何字符 |
[^a-z] | 反向范围字符 |
\b | 字边界 |
\B | |
\d | 数字 |
\D | |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\s | 空白字符 |
\S | |
\t | 制表符 |
\v | 垂直制表符 |
\w | 任何字类字符,包括下划线[A-Za-z0-9_] |
\W | |
\xn | n为16进制ASCII 码 |
\un | n为4位16进制数表示Unicode 字符 |
Pattern
返回类型 | 方法 | |
---|---|---|
Pattern | Pattern.compile(String regex) | 返回Pattern对象 |
String | pattern() | 返回正则表达式字符串 |
Matcher | matcher(CharSequence input) | 与compile方法一起用创建出Matcher |
boolean | Pattern.matches(String regex, CharSequence input) | 字符串是否匹配正则表达式 |
String[] | split(CharSequence input) | 根据分割字符给字符串分段,结果不包括分割字符 |
String[] | split(CharSequence input, int limit) | limit限制匹配数量 |
String | Pattern.quote(String s) | 生成字符串对应正则表达式 |
boolean b = Pattern.matches("^.HHHcc", "HHHcc");
Pattern p = Pattern.compile("-.");//加^会导致不匹配,因为^表示开头
String[] strings = p.split("a-cv-a5-gy-rd",4);
for (String s:strings){
System.out.println(s);
}
//验证生成正则表达式是否正确
String s = "av233v";
String v = Pattern.quote(s);
System.out.println(Pattern.matches(v,s));
Matcher
Pattern p = Pattern.compile("^A(\\d+)A-(.{2})-(.{2})");
Matcher m = p.matcher("A2233A-CC-VV");
if (m.matches()){
int num = m.groupCount();
System.out.println(num);
for (int i=0;i<=num;i++){
System.out.println(m.group(i));
}
}
else {
System.out.println("未匹配");
}