1、基本语法
2、Java中的应用
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。其包括三个包:
- Pattern:Pattern对象是正则表达式的已编译版本。其没有任何公共构造器,我们通过传递一个正则表达式参数给公共静态方法 compile 来创建一个pattern对象。
- Matcher:Matcher是用来匹配输入字符串和创建的 pattern 对象的正则引擎对象。这个类没有任何公共构造器,我们用patten对象的matcher方法,使用输入字符串作为参数来获得一个Matcher对象。
- PatternSyntaxException:如果正则表达式语法不正确将抛出PatternSyntaxException异常。
Pattern
Matcher
3、实验
实验描述:读取一段违章处理信息,提取出要求的信息并输出。
输出:
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex_TextGu {
public static void extractInfo(String content, String reg,String des){
String find_result = null;
// 编译正则表达式
Pattern pattern = Pattern.compile(reg);
// 创建Matcher对象
Matcher matcher = pattern.matcher(content);
// 判断是否有符合规则的子字符串
boolean result = matcher.find();
if (result) {
// 读取匹配的子字符串
find_result = matcher.group();
}
if (find_result != null) {
System.out.println(des + " : " + find_result);
}
}
public static void main(String[] args) {
//编写正则表达式
// 读取身份证号码
String cardRegex = "(?<!\\d)[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)(?!\\d)";
// 读取车牌号
String licenseRegex = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z]{1}[A-Z0-9]{5}(?![A-Za-z0-9])";
// 读取时间
String timeRegex = "(\\d{4}年)?(((0?[1-9])|10|11|12)月)?((0?[1-9])|[1-2][0-9]|3[0-1])日((0?[0-9]|1[0-9]|2[0-3])时((0?[0-9]|[1-5][0-9])分)?)?";
// 读取地点
String placeRegex = "(?<=在)(([\u4e00-\u9fff]*省)|([\u4e00-\u9fff]*自治区))?(([\u4e00-\u9fff]*市)|([\u4e00-\u9fff]*自治州))(([\u4e00-\u9fff]*区)|([\u4e00-\u9fff]*县))";
String content = "重点车辆严重违法行为公示详情 决定书编号:01130018262980509354 北京市居民王二相(男,42岁,110101197608012543)于2016年10月21日21时15分,在山东省济南市高新区实施醉酒后驾驶机动车的违法行为。驾驶车辆号牌种类为小型汽车,车牌号码为京NQ016Q。依照《中华人民共和国道路交通安全法》第九十一条第二款,处以吊销驾驶证的处罚。处罚部门:北京市公安局西城交通支队联系电话:010-86531223公示日期:2016年10月30日";
extractInfo(content, cardRegex,"身份证号");
extractInfo(content, licenseRegex,"车牌号");
extractInfo(content, timeRegex,"时间");
extractInfo(content, placeRegex,"读取地点");
}
}