Java正则表达式
第1章 正则表达式基础语法
1. 正则表达式的介绍
-
什么是正则表达式:
* 正则表达式是检查、匹配字符串的表达式
* 正则表达式是描述规则,主流语言都有良好支持
* 字符串校验、查找与替换是正则表达式主要使用场景
2. 正则表达式字符范围匹配
- 正则表达式区分大小写
tool.oschina.net/regex 开源中国提供的正则表达式在线测试工具
正则表达式是按照字符的前后顺序以此匹配
3. 元字符
实例:
1、匹配数字(3213.383219)
正则 : 表示匹配有四位整数和六位小数的数字,小数点前面的\不能忽略
2、匹配杭州与宁波座机号码(0571|0574-xxxxxxxx)
正则: 057[14]-\d\d\d\d\d\d\d\d
3、请匹配18位身份证号
[1234568]\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d[0-9Xx]
.特殊字符,只匹配 . ------------------------------->原意输出
4. 多次重复匹配
{3,}后面写意为最少三次
实例:
1、验证短信验证码
\d{6}
2、请匹配全国座机号(区号3或4位-电话号码7或8位r如0312-66666666
\d{3,4}-\d{7,8}
3、请匹配英文姓名
[A-Z][a-z]+\s[A-Z][a-z]*(\s代表空格,也可以直接空格也行)
5. 定位匹配
- 主要用于以什么开头/结尾
- ^ab.*
^表示以什么开头
.任意字符
*任意长度
如果bababba是可以匹配的,如果baababab是不行的 - .*ab$
$代表以什么结尾
.是任意字符
*是任意长度
6. 贪婪模式与非贪婪模式
7. 表达式分组
- 分组将"正则"分组为多个子表达式用()来表示一个情况或一个部分
实例:abababcdcdcd 正则:(ab){3}(cd){3}
1、匹配验证码(4位或6位)
(^\d{4}KaTeX parse error: Undefined control sequence: \d at position 5: )|(^\̲d̲{6})
2、匹配车牌号
^([冀][A-Z])-([A-Z0-9]){5})$
3、匹配名字
[A-Z][a-z]+\s[A-Z][a-z]*$ 英文名
[\u4e00-\u9fa5]{2,8}$ 中文名//中文匹配用\u4e00-\u9fa5区间,表示中文汉字的编码范围
第2章 正则表达式应用
1.JavaScript表单验证
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="#" method="post" id="frmInfo">
<div id="err" style="color:red">
</div>
<div>
姓名:<input id="name" name="name"/>
</div>
<div>
身份证:<input id="idno" name="idno"/>
</div>
<div>
<input type="submit" />
</div>
</form>
<script type="text/javascript">
document.getElementById("frmInfo").onsubmit = function(){
//在JS中定义正则表达式对象只需要在 /正则表达式/
var regex1 = /^[\u4e00-\u9fa5]{2,8}$/;
var regex2 = /^[1234568]\d{16}[0-9xX]$/
var name = document.getElementById("name").value;
var idno = document.getElementById("idno").value;
if(regex1.test(name) == false){//利用正则校验数据,true代表匹配,false代表不匹配
document.getElementById("err").innerHTML = "无效姓名";
return false;
}else if(regex2.test(idno) == false){
document.getElementById("err").innerHTML = "无效身份证号";
return false;
}else{
alert("验证通过,准备提交")
return true;
}
}
</script>
</body>
</html>
2. Java中Web页面信息提取
- 提取html中的中文和英文
Patter为 java中的正则表达式类
package com.imooc.regex;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexSample {
public static void main(String[] args) {
StringBuilder content = new StringBuilder();
try {
FileInputStream fis = new FileInputStream("D:/workspace/regex/WebContent/sample.html");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(isr);
String lineText = "";
while((lineText = bufferedReader.readLine()) != null) {
// System.out.println(lineText);
content.append(lineText + "\n");
}
bufferedReader.close();
System.out.println(content);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//1.创建正则表达式对象
Pattern p = Pattern.compile("<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-Z]+)</li>");
//2.匹配正则表达式
Matcher m = p.matcher(content);
//3.查找匹配的结果
while(m.find()) {
// System.out.println(m.group(0));
String chs = m.group(1);
String eng = m.group(2);
System.out.println(chs + "-" + eng);
}
}
}