正则表达式用于操作字符串数据,通过一些特定的符号来体现的。
当对一个qq号效验时,需要长度5-15,只能是数字,0不能开头一般的写法
package com.monfolld.regex;
public class RegexDemo {
public static void main(String[] args){
/*需求:定义一个功能对qq号进行效验
* 需求:长度5~15,只能是数字,0不能开头*/
String qq="12345";
checkQQ(qq);
}
public static void checkQQ(String qq){
int len=qq.length();
if (len>=5 && len<=15){
if (!qq.startsWith("0")){
try {
long l=Long.parseLong(qq);
System.out.println(l+":正确");
}catch (NumberFormatException e){
System.out.println(qq+":含有非法字符");
}
} else {
System.out.println(qq + "不能0开头");
}
}else{
System.out.println(qq+":长度错误");
}
}
}
运用正则表达式
package com.monfolld.regex;
public class RegexDemo {
public static void main(String[] args){
String qq="12345";
String regex="[1-9][0-9]{4,14}";//正则表达式
boolean b=qq.matches(regex);
System.out.println(qq+":");
}
常见的功能
package com.monfolld.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo2 {
public static void main(String[] args){
/*正则表达式对字符串常见操作
* 1,匹配
* 其实就是使用String类中的matches方法
* 2.切割
* 其实就是使用String类中的split方法
* 3.替换
* 其实使用的就是String类中的replaceAll方法
* 4.获取
* 将正则规则进行封装
* Pattern p=Pattern.compile("a+b");
* 通过正则对象的matcher方法字符串相关联,获取要对字符串操作的匹配器对象Matcher
* Matcher m=p.matcher("aaaaab");
* 通过Matcher匹配器对象的方法对字符串进行操作
* boolean b=m.matches();*/
functionDemo_4();
}
public static void functionDemo_1(){
//匹配手机号码是否正确
String tel="15800001111";
String regex="1[358]\\d{9}";//相当于 String regex="1[358][0-9]{9}";
boolean b=tel.matches(regex);
System.out.println(tel+":"+b);
}
public static void functionDemo_2(){
/*String str="zhangsan xioqiang zhaoliu";
String[] names=str.split(" +");*/
/*String str="zhangsan.xioqiang.zhaoliu";
String[] names=str.split("\\.");*/
String str="zhangsanttttxioqiangmmmmmzhaoliu";
String[] names=str.split("(.)\\1+");
for (String name:names){
System.out.println(name);
}
}
public static void functionDemo_3(){
String str="zhangsanttttxioqiangmmmmmmmzhaoliu";
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
String tel="15800001111";
tel=tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(tel);
}
public static void functionDemo_4(){
String str="da jia hao ,ming tian bu fang jia!";
String regex="\\b[a-z]{3}\\b";
//将正则封装成对象
Pattern p=Pattern.compile(regex);
//通过正则对象获取匹配器对象
Matcher m=p.matcher(str);
//既然要获取三个字母组成的单词
//查找find();
while (m.find()){
System.out.println(m.group());//获取匹配的子序列
System.out.println(m.start()+":"+m.end());
}}
}
例子
package com.monfolld.regex;
import java.util.TreeSet;
public class RegexTest {
public static void main(String[] args){
/*
* 1.治疗口吃:我我...我我..我我我要...要要要要....要要要要..学学学学...学学编编...程程程程
* 2.对ip第hi排序
* 3.对邮件地址校验*/
test_3();
}
public static void test_1(){
String str="我我...我我..我我我要...要要要要....要要要要..学学学学...学学编编...程程程程";
//1.将字符串中.去掉。用替换
str=str.replaceAll("\\.+","");
System.out.println(str);
//2.替换叠词
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
/*ip地址排序
*
* 192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55 */
public static void test_2(){
String ip_str="192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";
//1.将ip地址切出
/*String[] ips=ip_str.split(" +");
TreeSet<String> ts=new TreeSet<String>();
for (String ip:ips){
//System.out.println(ip);
ts.add(ip);
}
for (String ip:ts){
System.out.println(ip);
}
*/
//1.为了让ip可以按照字符串顺序比较,只要让ip的每一段的位数都相同
//所以,补零,按照每一位所需要做多0进行补充,每一段都加两个0
ip_str=ip_str.replaceAll("(\\d+)","00$1");
System.out.println(ip_str);
//然后每一段保留数字3位
ip_str=ip_str.replaceAll("0*(\\d{3})","$1");
System.out.println(ip_str);
String[] ips=ip_str.split(" +");
TreeSet<String> ts=new TreeSet<String>();
for (String ip:ips){
//System.out.println(ip);
ts.add(ip);
}
for (String ip:ts){
System.out.println(ip.replaceAll("0*(\\d+)","$1"));
}
}
public static void test_3(){
String mail="abcd1@sina.com";
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3})+";
boolean b=mail.matches(regex);
System.out.println(mail+":"+b);
}
}