标签:
package regular;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串
特点:用一些特定的符号来表示一些代码的操作,这样就简化书写。
所以学习正则表达工,就是在学习一些特殊符号的使用
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差
具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
*/
public class RegexDemo {
public static void main(String[] args) {
checkQQ();
demo();
splitDemo("zhangsan,lishi,wangwu",",");//按照,进行切换
splitDemo("zhangsan lishi wangwu"," +");//按照多个空格进行切割
splitDemo("zhangsan.lishi.wangwu","\\.");//按照多个空格进行切割
splitDemo("c:\\abc\\a.txt","\\\\");//去掉反斜杠
splitDemo("erkktykkqqquio","(.)\\1+" );//按照叠词来完成切割
//可以将规则封装成一个组,用()完成,组出现都有编号,从1开始,想要使用已有的组可以通过
//\n(n就是组的编号)的形式来获取
replaceDemo("s tr in g"," +"," ");//将多个空格替换成一个空格
String str="wer1289980000ty12345654uiod12435676f";
replaceDemo(str,"\\d{5,}","#");//将数字替换成#
String str1="erkktyqqquizzzzzo";
replaceDemo(str1,"(.)\\1+","&");//将叠词替换成&
replaceDemo(str1,"(.)\\1+","$1");//叠词替换成一个,$1表示拿前一个规则的第一个组
getDemo();
}
/*
正则表达式的第四个功能
4.获取:将字符串的符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象
2.让正则表达对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出
*/
public static void getDemo(){
String str="ming jian jiu yao fang jia le ,da jia.";
String reg="\\b[a-z]{4}\\b";
//将规则封装成对象
Pattern p =Pattern.compile(reg);
//让正则表达对象和要操作的字符串相关联
Matcher m=p.matcher(str);
System.out.println(m.matches());
//其实String类中的matches方法,用的就是 pattern和mattcher对象来完成的
//只不过被String的方法封装后,用起来较为简单,但是功能单一
boolean b=m.find();//将规则使用到字符串上,并进行符合规则的子串查找
System.out.println(b);
//System.out.println(m.group());//用于获取匹配后的结果
//System.out.println("matchers:"+m.matches());
while(m.find()){
System.out.println(m.group());
System.err.println(m.start()+"..."+m.end());
}
}
//替换
public static void replaceDemo(String str,String regex,String newStr){
String s=str.replaceAll(regex,newStr);
System.out.println(s);
}
//切割
public static void splitDemo(String str,String regex){
String[] arr=str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
//\\d 代表'\d'
public static void demo(){
String str="bc9999";
String regex="[bcd][a-z]\\d+";//表示第一个字符只能是bcd中一个,且只有一字符,第二个字符只能是a-z
boolean flag=str.matches(regex);
System.out.println(flag);
checkTel();
}
/*
匹配
手机号段只有 13xxx 15xxx 18xxx
*/
public static void checkTel(){
String tel="13800000000";
String telReg="1[358]\\d{9}";
boolean b=tel.matches(telReg);
System.out.println(b);
}
/*
正则验证QQ号码
*/
public static void checkQQ(){
String qq="02121212";
String regex="[1-9]\\d{4,14}";
boolean flag=qq.matches(regex);
if(flag){
System.out.println("is ok...");
}else{
System.out.println("is nonono...");
}
}
/*
对QQ号码进行校验
要求:5-15 0不能开头,只能是数字
这种方式:使用了String类中的方法,进行组合完成了需求 ,但是代码过于复杂
*/
public static void checkQQ_1() {
String qq = "12345";
int len = qq.length();
if (len >= 5 && len <= 15) {
if (!qq.startsWith("0")) {
try{
Long l=Long.parseLong(qq);
System.out.println("qq:"+qq);
}catch(NumberFormatException e){
System.out.println("出现了非法字符");
}
/*char[] arr = qq.toCharArray();
boolean flag = false;
for (int x = 0; x < arr.length; x++) {
if (!(arr[x] >= '0' && arr[x] <= '9')) {
flag = true;
break;
}
}
if (!flag) {
System.err.println("qq:" + qq);
} else {
System.out.println("qq号码中现了非法字符 ");
}*/
}else{
System.out.println("不可以0开始");
}
}else{
System.out.println("长度错误");
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012750578/article/details/47087757