认识正则表达式
public class RegexApi {
public static void main(String[] args) {
String str = "123";
if (str.matches("\\d+")) {
int num = Integer.parseInt(str);
System.out.println(num * 2);
}
}
}
常用正则标记
-
【数量:单个】字符匹配:
- 任意字符:表示由任意字符组成;
- //:匹配“\”;
- \n:匹配换行;
- \t:匹配制表符;
-
【数量:单个】字符集匹配(可以从里面任选一个字符):
- [abc]:表示可能是字母a、b、c中的任意一个;
- [^abc]:表示不是字母a、b、c中的任意一个;
- [a-zA-Z]:表示由一个任意字母组成,不区分大小写;
- [0-9]:表示由一位数字所组成;
-
【数量:单个】简化字符集:
- .:表示任意的一个字符;
- \d:等价于[0-9]范围;
- \D:等价于[^0-9]范围:不是一个数字;
- \s:匹配任意的一位空格,可能是空格、换行、制表符;
- \S:匹配任意的一位非空格;
- \w:匹配字母、数字、下划线,等价于[a-zA-Z_0-9];
- \W:匹配非字母、数字、下划线,等价于[^a-zA-Z_0-9];
-
边界匹配:
- ^:匹配边界开始;
- $:匹配边界结束;
-
数量表示,默认情况下只有添加上了数量单位才可以匹配多位字符:
- 表达式?:该正则可以出现0次或者1次;
- 表达式*:该正则可以出现0次、1次或多次;
- 表达式+:该正则可以出现1次或多次;
- 表达式{n}:表达式的长度正好为n;
- 表达式{n,}:表达式的长度为n以上;
- 表达式{n, m}:表达式的长度在n~m之间;
-
逻辑表达式,可以连接多个正则:
- 表达式X表达式Y:X表达式之后紧跟上Y表达式;
- 表达式X|表达式Y:有一个表达式满足即可;
- (表达式):为表达式设置一个整体描述,可以为整体描述设置数量单位;
String类对正则的支持
No. | 方法 | 类型 | 描述 |
---|---|---|---|
01 | public boolean matches(String regex) | 普通 | 将指定字符串进行正则判断 |
02 | public String replaceAll(String regex, String replacement) | 普通 | 替换全部 |
03 | public String replaceFirst(String regex, String replacement) | 普通 | 替换首个 |
04 | public String[] split(String regex) | 普通 | 正则拆分 |
05 | public String[] split(String regex, int limit) | 普通 | 正则拆分指定个数 |
//实现字符串替换(删除掉非字母与数字)
public class RegexApi {
public static void main(String[] args) {
String str = "alsdj89283]][[;.[';l$#%24jkj";
String regex = "[^a-zA-Z0-9]+";
System.out.println(str.replaceAll(regex, ""));
}
}
//实现字符串的拆分
public class RegexApi {
public static void main(String[] args) {
String str = "a11b22c333d4444e55555f666666g";
String regex = "\\d+";
String[] result = str.split(regex);
for (int x = 0; x < result.length; x++) {
System.out.print(result[x] + "、");
}
}
}
//判断一个数据是否为小数,如果是小数则将其变成double类型
public class RegexApi {
public static void main(String[] args) {
String str = "100.33";
String regex = "[1-9]{1}\\d+(\\.\\d+)?";
System.out.println(str.matches(regex));
}
}
//判断一个字符串是否由日期组成,如果是由日期组成则将其转为Date类型
import java.text.SimpleDateFormat;
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "1900-01-01";
String regex = "\\d{4}-\\d{2}-\\d{2}";
if (str.matches(regex)) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
}
}
}
//判断给定的电话号码是否正确
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "(010)-34523465";
String regex = "((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}";
System.out.println(str.matches(regex));
}
}
//验证email格式
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "xiaoming@aa.cn";
String regex = "[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|net|gov)";
System.out.println(str.matches(regex));
}
}
java.util.regex包支持
- 虽然在大部分情况下都可以利用String类实现正则的操作,但是也有一些情况需要使用到java.util.regex开发包中提供的正则处理类,在这个包里有两个类:Pattern(正则表达式编译)、Matcher(匹配);
- Pattern类提供有正则表达式的编译处理支持:public static Pattern compile(String regex),同时也提供有字符串的拆分操作:public String [] split(CharSequence input)
import java.util.regex.Pattern;
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "alkjdf082350-p[aps[]dpf[po0-=345.]p][";
String regex = "[^a-zA-Z]+";
Pattern pat = Pattern.compile(regex);
String [] result = pat.split(str);
for (int x = 0; x < result.length; x++) {
System.out.print(result[x] + "、");
}
}
}
- Matcher类,实现了正则匹配的处理类,这个类的对象实例化依靠Pattern类完成:
- Pattern类提供的方法:public Matcher matcher(CharSequence input);
- 当获取了Matcher类的对象之后就可以利用该类中的方法进行如下操作:
- 正则匹配:public boolean matches()
- 字符串替换:public String replaceAll(String replacement)
//字符串匹配
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "101";
String regex = "\\d+";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
System.out.println(mat.matches());
}
}
//字符串替换
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexApi {
public static void main(String[] args) throws Exception {
String str = "0918123aaklsdjf[]]234][]234][#@#323lkj";
String regex = "\\D+";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
System.out.println(mat.replaceAll(""));
}
}
//分组功能 String类所不具备
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexApi {
public static void main(String[] args) throws Exception {
//要求取出#{内容}中的所有内容
String str = "INSERT INFO dept(deptno, dname, loc) VALUES (#{deptno}, #{dname}, #{loc})";
String regex = "#\\{\\w+\\}";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
while (mat.find()) {
System.out.println(mat.group(0).replaceAll("#|\\{|\\}", ""));
}
}
}
网友评论