正则表达式,匹配,切割,替换
正则 获取
/**
* 正则表达式:符合一定规则的表达式
* 作用:用户专门操作字符串.
* 特点:用一些特定的符号来表示一些代码操作.这样就简化了代码书写.
* 学习正则表达式,就是在学习一些特殊符号的使用
* 好处:可以简化对字符串的复杂操作
* 弊端: 符号定义越多,正则越长,阅读新越差.
*
* 具体操作功能
* 1.匹配的工作 String matches()方法;
* 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
*
* 2.切割: String split()
*
* 3.替换: replace() replaceAll()
*
*
*
*/
public class RegexDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//checkqq();
//demo();
//System.out.println((char)11); //男性的生物表示图标
//splitDemo1("张三.李四...王武...招六.sunba.xiaqi","\\.+");
//splitDemo1("c:\\abc\\a.txt","\\\\");
String str="1356420773000|2012121245|2589712|20.00|0.60";
splitDemo1(str,"\\|");
System.out.println("叠词分割");
//按照叠词切割 \n:表示 捕获组, (*) 表示作为不获组
//为了让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号
//从1开始,想要使用组可以通过\n(n就是组的编号)的形式来获取
//判断组有多少个,就看多有多少个左括号, 编码呢,也是 从左变开始 1,然后 2,然后 ....
//举例 ((())()) : 有4组 , (1(2(3))(4)):
str="qiokknooloqqqnsdfhhdzzzzjf";
splitDemo1(str,"(.)\\1+"); // kk qq oo hh zz
System.out.println("---------替换----------");
str="wer23413132231st1551564sdfsd56f1565641416121sdf";
replaceAllDemo(str,"\\d{5,}","#"); //连续 5个以上的数字 替换成 #
//替换叠词
str="qiokknooloqqqnsdfhhdzzzzjf";
replaceAllDemo(str,"(.)\\1+","&"); //将叠词 替换 与 符号
//将叠词 替换成 "$"
replaceAllDemo(str,"(.)\\1+","\\$"); //将叠词 替换 与 符号
//将叠词 替换成 单个字符 zzzz--->z qq-->q
replaceAllDemo(str,"(.)\\1+","$1"); //使用 "$" 和编号,获取 前面匹配中的组
}
public static void replaceAllDemo(String ostr,String regex,String nstr){
ostr=ostr.replaceAll(regex, nstr);
System.out.println(ostr);
}
//简单的
public static void splitDemo1(String str,String regex){
/* String str="张三.李四...王武...招六.sunba.xiaqi";
str="c:\\abc\\"
String reg="\\.+"; *///按照多个 点进行切割 "." 是正则中的特殊字符,需要转义 \. ;但是 \ 也需要转移
String[] arr=str.split(regex);
for (String s : arr) {
System.out.println(s);
}
}
//简单的
public static void splitDemo(){
String str="张三,李四,王武,招六,sunba,xiaqi";
String reg=",";
String[] arr=str.split(reg);
for (String s : arr) {
System.out.println(s);
}
}
/**
* 校验手机号
* 手机号段只有 13xxx 15xxx 18xxx
*/
public static void checkMobile(){
String tel="";
String telReg="1[358]\\d9";
System.out.println(tel.matches(telReg));
}
/**
* java 中正则表达式中 "\" 要成对出现
*/
public static void demo(){
String str="b9";
String reg="[a-zA-Z]\\d?";
boolean b=str.matches(reg);
System.out.println(b);
}
/**
* 使用正则表达式
*/
public static void checkqq(){
String qq="1323123312";
String regex="[1-9][0-9]{4,14}";
boolean flag=qq.matches(regex);
if(flag)
System.out.println(qq+".... is ok");
else
System.out.println(qq+".... no no no");
}
/**
* 对QQ号码进行校验
* 要求 :5~15 0 不能开头,只能是数字
*
* 这种方式,使用String类中的方法,进行组合完成了需求,但是代码过于复杂
*/
public static void checkQQ(){
String qq="1234234121612312";
int len=qq.length();
if(len>=5 && len<=15){
if(!qq.startsWith("0")){
/*char[] arr=qq.toCharArray();
boolean flag=true;
for (char c : arr) {
if((c>='0' && c<='9')){
flag=false;
break;
}
}
if(flag){
System.out.println("QQ:"+qq);
}else{
System.out.println("QQ出现非法字符");
}*/
try{
long l=Long.parseLong(qq);
System.out.println("QQ:"+qq);
}catch(NumberFormatException e){
System.out.println("QQ出现非法字符");
}
}else{
System.out.println("不可以是0开头");
}
}else{
System.out.println("QQ长度错误");
}
}
}
正则 获取
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式的第四个功能.
* 4.获取: 将字符穿中 符合规则的 子串 取出
*
* 操作步骤:
* 1. 将正则表达式 封装成对象
* 2. 让正则对象和要操作的字符串关联
* 3. 关联 后获取正则匹配引擎
* 4. 通过 引擎 对符合规则的子串 进行操作 比如 取出
*
*
*
*/
public class RegexDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
getDemo();
}
public static void getDemo(){
String str="123456";
str="ming tian jiu yao fang jia la.";
String regex="[1-9]\\d{4,14}";
regex="\\b[a-z]{3}\\b";
//1.将 规则 封装 成对象
Pattern p=Pattern.compile(regex);
//2.让正则对象 和 字符串 关联
Matcher m=p.matcher(str); //获取匹配其 引擎
//其实 String类中的matches方法,用的就是Pattern和 Matcher 对象来完成
//只不过,被String的方法封装后,用起来简单,但是 功能单一.
//想要使用 更多复杂的对象的时候 ,就要找 Pattern 和 Matcher 对象
//System.out.println(m.matches());
//还有很多 String 没有封装的方法
/* boolean flag=m.find();//将规则作用到字符串上,并进行符合跪着的子串查找
System.out.println(flag);
System.out.println(m.group()); //用户获取匹配后的结果,但是得先找下
*/
System.out.println("matchers:"+m.matches());//作用于整个字符串,返回 false 发现会影响 后面 group的查找, 改变了 查找的索引
while(m.find()){
System.out.println(m.group());
System.out.println(m.start()+"..."+m.end());//包含头 ,不包含 尾
}
}
}