基本介绍
如果想要灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:
- 特殊字符
- 限定符
- 选择匹配符
- 字符匹配符
- 定位符
特殊自负,元字符转义号 \
\符号说明:在使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错。在java的正则表达式中,两个\代表其他语言中的一个\
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示转义字符的使用
public class Regexp_02 {
public static void main(String[] args) {
String content = "abd(dnn..sd(d..nna(";
String regStr = "\\.";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
}
}
元字符——限定符
1. *:指定字符重复0次或n次(可以为0次)
2. +:指定字符重复1次或n次(最少1次)
3. ?:指定字符重复0次或1次(最多1次)
4. {n}:只能匹配n个字符
5. {n,}:指定至少匹配n个字符
6. {n,m}:指定匹配长度范围为n-m
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示限定符
public class Regexp_05 {
public static void main(String[] args) {
String content = "shaaaa124383145_ ..#@djFSFnsfds";
String regStr = "a{3}"; //表示匹配 aaa
String regStr1 = "\\d{2}"; //表示匹配两位任意数字
//JAVA默认贪婪匹配,尽可能匹配多的
String regStr2 = "a{3,4}"; //表示匹配 aaa或者aaaa
String regStr3 = "\\d{2,5}"; //表示匹配任意2个或3、4、5个数字
String regStr4 = "\\d{2,}"; //表示匹配长度大于两位的任意数字
String regStr5 = "a+"; //表示匹配一个 a或者多个a
String regStr6 = "1*"; //表示匹配0个1或者多个1
String regStr7 = "a1?"; //表示匹配 a 或者 a1
Pattern pattern = Pattern.compile(regStr7);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
}
}
元字符——选择匹配符
在匹配某个字符串的时候是选择性的,即既可以匹配这个,又可以匹配那个,需要用到选择匹配符号"|",匹配“|”之前的或之后的表达式
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示选择匹配符
public class Regexp_04 {
public static void main(String[] args) {
String content = "sha1145_ ..#@djFSFnsfds";
String regStr = "\\d|s|fd";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
}
}
元字符——字符匹配符
1. [ ] :可接收的字符列表
2. [^] :不接收的字符列表
3. - :连字符
4. . :匹配除\n之外的任何字符
5. \\d:匹配单个数字字符,相当于[0-9]
6. \\D:匹配单个非数字字符
7. \\w:匹配单个数字、大小写字母字符、下划线,相当于[0-9a-zA-Z_]
8. \\W:匹配非单个数字、大小写字母字符、下划线
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示字符匹配符的使用
public class Regexp_03 {
public static void main(String[] args) {
String content = "sg4@45b ufua_Bc 453F..SDGGGS21hbh..b155fhjdsbf";
String regStr = "[a-z]"; //匹配 a-z 之间任意一个字符
String regStr1 = "[A-Z]"; //匹配 A-Z 之间任意一个字符
String regStr2 = "abc"; //匹配 abc 字符串【默认区分大小写】
String regStr3 = "(?i)abc"; //匹配 abc 字符串【不区分大小写】
String regStr4 = "a(?i)bc"; //匹配 abc 字符串【bc不区分大小写】
String regStr5 = "a((?i)b)c"; //匹配 abc 字符串【b不区分大小写】
String regStr6 = "[0-9]"; //匹配 0-9 之间任意一个字符
String regStr7 = "[^a-z]"; //匹配不是 a-z 之间任意一个字符
String regStr8 = "[abcd]"; //匹配在 abcd 之间任意一个字符
String regStr9 = "\\D"; //匹配不在 0-9 之间任意一个字符
String regStr10 = "\\d"; //匹配在 0-9 之间任意一个字符
String regStr11 = "\\W"; //匹配非字母、数字、下划线,相当于[^a-zA-Z0-9_]
String regStr12 = "\\w"; //匹配字母、数字、下划线,相当于[a-zA-Z0-9_]
String regStr13 = "\\S"; //匹配任何非空白字符
String regStr14 = "\\s"; //匹配任何空白字符(空格,制表符等)
String regStr15 = "."; //匹配除 \n 之外的所有字符。如果要匹配 . 本身,则需要使用转义字符\\
String regStr16 = "\\."; //匹配 . 本身
//当创建 Pattern对象时,指定 Pattern.CASE_INSENSITIVE,表示匹配不区分大小写
Pattern pattern = Pattern.compile(regStr16/*,Pattern.CASE_INSENSITIVE*/);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
}
}
元字符——定位符
定位符,规定要匹配的字符串出现的位置,比如在字符串的开始位置还是结束位置
1. ^:指定起始字符
2. $:指定结束字符
3. \b:匹配目标字符串的边界(边界指子串间有空格,或目标字符串的结束位置)
4. \B:匹配目标字符串的非边界
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示定位符的使用
public class Regexp_06 {
public static void main(String[] args) {
String content = "13a#cxa addc sfa";
//以至少一个数字开头,后接任意个小写字母的字符串
String regStr = "^[0-9]+[a-z]*"; //^:指定起始符
//以至少一个数字开头加上至少一个小写字母结尾的字符串
String regStr2 = "^[0-9]+[a-z]+$"; //$:指定结束字符
//以至少一个数字开头加上"-"再加上至少一个小写字母结尾的字符串
String regStr3 = "^[0-9]+\\-[a-z]+$"; //$:指定结束字符
// \\b:匹配边界的字符
String regStr4 = "a\\b"; //边界:指子串间有空格,或目标字符串的结束位置
// \\B:匹非边界的字符
String regStr5 = "a\\B"; //边界:指子串间有空格,或目标字符串的结束位置
Pattern pattern = Pattern.compile(regStr5);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println(matcher.group(0));
}
}
}