一、概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
二、匹配字符串
String类中的matches方法:可以匹配固定的字符串,也可以匹配符合一个模式的字符串集
“Java".matches("Java"); 结果为true
“Java is fun".matches("Java.*"); 结果为true
其中“Java.*”就是一个正则表达式。
三、常见的正则表达式
正则表达式由字面值符和特殊符号组成;
| 正则表达式 | 匹配 |
| [abc] | a,b或c |
| [^abc] | 除了a,b或者c外的任意字符 |
| [a-e[m-p]] | a到e或m到p |
| d | 一个数字,[0-9] |
| D | 一个非数字 |
| w | 单词字符 |
| W | 非单词字符 |
| p* | 0或者多次出现模式p |
| p+ | 1次或者多次出现模式p |
| p? | 0或1次出现模式p |
| p{n} | 正好出现n次模式p |
| p{n,} | 至少出现n次模式p |
| p{P} | 一个标点字符!”#$%&’()*+,-./:;<=>?@[]^_’{|}~ |
四、替换和拆分字符串
String类中有repleacAll、replaceFirst和split方法实现替换和拆分字符串
repleaceAll方法可以替换所有匹配的子字符串;
repleaceFirst则替换第一个匹配的子字符串
如:
System.out.println("Java Java Java".repleacAll("v\w", "wi"));
显示:
Jawi Jawi Jawi
System.out.println("Java Java Java".repleacFirst("v\w", "wi"));
显示:
Jawi Java Java
split方法:split(regex,limit)可使用匹配的分隔符将一个字符串拆分为子字符串
其中regax为匹配模式(正则表达式),limit参数确定模式匹配多少次;
如:
"Java1HTML2Perl".split("\d",0);
拆分为Java,Html,Perl;
五、案例正则表达式验证IP地址
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test{
public static void main(String[] args) {
String regex = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}";
String answer = "Y";
do {
System.out.print("请输入 IP 地址:");
Scanner scan = new Scanner(System.in);
String IP= scan.next(); // 接收用户在控制台输入的IP
Pattern pattern = Pattern.compile(regex); // 编译正则表达式
Matcher matcher = pattern.matcher(IP); // 创建给定输入模式的匹配器
boolean bool = matcher.matches();
if(bool) { // 如果验证通过
System.out.println("输入的 IP 地址正确。");
} else {
System.out.println("输入的IP地址格式错误。");
}
System.out.print("是否继续输入?(Y/N 或者 y/n)");
answer = scan.next();
}while(answer.equalsIgnoreCase("Y"));
System.out.println("程序结束。");
}
}
案例参考:http://c.biancheng.net/view/864.html



