概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
特点:
1.正则表达式描述了一种字符串匹配的模式,也称规则表达式
2.常用于检索、替换符合指定模式(规则)的文本
3.大多数语言都支持正则表达式。如:Java;Python;JavaScript等
正则表达式语法
正则表达式是由普通字符与特殊字符组成的字符串
普通字符:原义字符、非打印字符
特殊字符:元字符:* + ? $ ^ . | \ ( ) { } [ ]
示例1:hello 可以匹配“hello”
示例2:h.*llo 可以匹配“hello”、“hallo”、“heello”……
非打印字符:
特殊字符:
预定义字符:
Java正则表达式
java.util.regex包
Pattern类:表示一个正则表达式,或者说匹配模式
Matcher类:Pattern对象matcher()方法的返回值,表示正则表达式对输入字符串的匹配结果
Pattern p=Pattern.compile("h\\w*llo");
System.out.println(p.pattern());//输出正则表达式字符串“h\w*llo”
Matcher matcher=p.matcher("hello");
if(matcher.matches())
System.out.println(matcher.group());//输出匹配结果
分组
如何获取字符串“hello”中的字符“e”?
使用“()”分组
Pattern p=Pattern.compile("h(\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
System.out.println(matcher.group(1));//输出匹配结果
命名分组
Pattern p=Pattern.compile("h(?<result>\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
System.out.println(matcher.group("result"));//输出匹配结果
练习1:使用正则表达式识别手机号码
需求说明
识别13X打头的手机号码
识别13X、18X打头的手机号码
识别所有手机号码并提取手机号段
// 手机号码验证
public class RegexDemo_1
{
public static void main(String[] args)
{
String tel = "";
Scanner in = new Scanner(System.in);
while(!tel.equals("over") )
{
System.out.println("请输入需要验证的手机号码:");
tel = in.nextLine();
if(tel.equals("over"))
{System.out.println("退出验证");
break;
}
if(isAtelNumber(tel))
System.out.println("正确:该号码是一个手机号码");
else
System.out.println("错误:该号码不是手机号码");
};
}
public static boolean isAtelNumber(String tel)
{
String regex = "1[358]\\d{9}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(tel);
return m.matches();
}
}
练习2:使用正则表达式切割字符串
需求说明
使用String的split()方法提取以“|”分割的字符串“jason|20|Java,Hadoop,Python”中的字段信息
分析
String的split()支持正则表达式作为参数
“|”是正则表达式元字符,必须进行转义
我有如下一个字符串:"91,27,46,38,50"
* 写代码实现最终输出结果是:"27,38,46,50,91"
*
* 分析:
* A:定义一个字符串
* B:把字符串进行分割,得到一个字符串数组
* C:把字符串数组进行变换成int数组
* D:对int数组排序
* E:把排序后的int数组在组装成一个字符串
* F:数组字符串
*
*/
public class 正则表达式练习2 {
public static void main(String[] args) {
//定义一个字符串
String s ="91,27,46,38,50";
//把字符串进行分割,得到一个字符数组
String[] strArray = s.split(",");
//把字符串数组变换成int数组
int[] arr =new int[strArray.length];
for(int x=0;x<arr.length;x++) {
arr[x]=Integer.parseInt(strArray[x]);
}
//对数组排序
Arrays.sort(arr);
//把排序后的int数组再组装成一个字符串
StringBuilder sb = new StringBuilder();
for(int x =0;x<arr.length;x++) {
sb.append(arr[x]).append(" ");
}
//转化字符串
String result = sb.toString().trim();
System.out.println(result);
}
}