Java基础学习正则表达式
2015-08-24 22:14
696 查看
正则表达式
一、概述
1、 概念:符合一定规则的表达式。
2、 作用:用于专门操作字符串。
3、 特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。
4、 好处:可以简化对字符串的复杂操作。
5、 弊端:符合定义越多,正则越长,阅读性越差。
正则表达式:
1.字符类:
1).[aeiou]
2).[^aeiou]
3).[a-z]
4).[a-zA-Z0-9]
2.逻辑运算符:
1).&&:与
2).|:或
3.预定义字符类:
1).".":任何字符
2)."\d":任何数字,[0-9]的简写形式;
3)."\D":任何非数字,[^0-9]的简写形式;
4)."\s":任何空白字符。空格、制表符(\t)、换行符(\n)
5)."\S":任何非空白字符。是[^\s]的简写形式;
6)."\w":任何大写、小写字母,或数字或下划线。是[a-zA-Z_0-9]的简写形式;
7)."\W":任何非单词字符。是[^\w]的简写形式;
4.限定符:
1)."+":1次或多次;
2)."?":0次或1次;
3)."*":0次或多次;
4).{n}:恰好n次;
5).{n,}:至少n次;
6).{n,m}:n(包含)--m(包含)次
5.String类中与正则表达式相关的方法:
1).String[] split(String regex):使用regex正则表达式的规则切割字符串;
2).replaceAll(String regex,String newStr):使用newStr替换字符串中符合regex表达式的字符串;
6.Pattern和Matcher类:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
二[b]、正则表达式具体功能[/b]
主要有四种具体功能:匹配、切割、替换和获取
示例:正则的匹配功能
class MatchesDemo
{
/*
对QQ号码进行校验
要求:5~15 0不能开头,只能是数字
*/
//方式一,不用正则表达式
public static void qqCheck_1(String qq)
{
if (!qq.startsWith("0"))
{
if (qq.length()>=5&&qq.length()<=15)
{
try
{
Long l=Long.parseLong(qq);//利用封装基本数据类型出现非数字报异常的特点
System.out.println(qq);
}
catch (NumberFormatException e)
{
System.out.println("包含非法字符!");
}
}
else
System.out.println("你输入的长度非法!");
}
else
System.out.println("没有0开头的号码,请重输!");
}
//方式二,用正则来实现
public static void qqCheck_2(String qq)
{
String regex="[1-9]\\d{4,14}";
if (qq.matches(regex))//用String类中matches方法来匹配
{
System.out.println(qq);
}
else
System.out.println(qq+":是非法的号码!");
}
/*
匹配
手机号段只有 13xxx 15xxx 18xxxx
*/
public static void phoneCheck(String phone)
{
String regex="1[358]\\d{9}";
if (phone.matches(regex))
{
System.out.println(phone+":::is ok..");
}
else
System.out.println("手机号码输入有误!");
}
public static void main(String[] args)
{
String qq="125696";
qqCheck_1(qq);//不用正则的方式
qqCheck_2(qq);//用正则的方式
String phone="13345678910";
phoneCheck(phone);//匹配手机号码是否正确
}
示例:正则的切割功能
class SplitDemo
{
public static void main(String[] args)
{
String regex1="\\.";//按 .切
String regex2=" +";//按空格切,可能有一个空格或者多个空格
String regex3="(.)\\1+";//按照出现两次或者以上的叠词切
String[] arr="192.168.1.62".split(regex1);//按 . 切
print(arr);
arr ="wo shi shui 545 21 3".split(regex2);//按空格切
print(arr);
arr="erkktyqqquizzzzzo".split(regex3);//按叠词切
print(arr);
}
//遍历
public static void print(String[] arr)
{
for (String s : arr)
{
System.out.println(s);
}
}
}
示例:正则的替换功能
4000
class ReplaceDemo
{
public static void main(String[] args)
{
String regex1="\\d{5,}";//将字符串中数字替换成#
String regex2="(.)\\1+";//将叠词替换为一个
String s1="erej569831217woshi2659810wosxs12356f";
s1=s1.replaceAll(regex1,"#");//将字符串中的数字替换成#
String s2="erkktyqqquizzzzzo";
s2=s2.replaceAll(regex2,"$1");//将叠词替换为一个,其中$1表示符合组中一个字符
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
}
}
示例:正则的获取功能
import java .util.regex.*;
class PatternDemo
{
public static void main(String[] args)
{
String s= "ming tian jiu yao fang jia le ,da jia。";
String regex="\\b[a-z]{4}\\b";
get(s,regex);
}
public static void get(String s,String regex)
{
//将规则封装成对象。
Pattern p=Pattern.compile(regex);
//让正则对象和要作用的字符串相关联。获取匹配器对象。
Matcher m=p.matcher(s);
//System.out.println(m.matches());
//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
//只不过被String的方法封装后,用起来较为简单。但是功能却单一。
while(m.find())//find()方法是将规则作用到字符串上,并进行符合规则的子串查找。
{
System.out.println(m.group());//group()方法用于获取匹配后结果。
System.out.println(m.start()+"...."+m.end());
//start()和end()分别表示匹配字符的开始和结尾的索引
}
}
}
相关文章推荐
- Java设计模式------单例设计模式
- Java内存
- Java的Calendar
- Java多线程之一
- 关于java中Double类型的运算精度问题
- 【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection
- java新手笔记30 集合
- Struts返回Json格式数据
- 初用Spring Test
- Struts2学习笔记(二):Struts2、Servlet和Filter作为控制器的实现与对比
- 深入理解java异常处理机制
- Java接口的特点
- java问题总结之3--用非科学计数法输出int、float、double等类型数据
- Tinking in Java--使用NIO实现非阻塞Socket通信
- Java接口的实例
- 从零开始学Java之多态 向上转型与向下转型
- Java学习笔记----反射
- springMVC校验之hibernate validator校验器的使用
- Java File类
- java.exe和javaw.exe的区别