一、正则表达式知识点:
是一种专门用于操作字符串的规则, 通过一些符号来表示,简化对字符串的复杂操作
弊端:阅读性差
常见的操作:
1、匹配 String matches(regex)
2、获取(查找):Pattern,Matcher
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(String)
while(m. find())
{
System.out.println(m.group());
}
3、切割:String split(regex);
4、替换:String replaceAll(regex,str);
示例:
获取文档中连续的数字
String regex="\\d(5,)";
Patternp=Pattern.compile(regex);
Matcher m=p.matcher(String)
while(m. find())
{
String s=m.group();
s.replaceAll(regex,"#");
}
5、网页爬虫:
通过网络以及IO读取网页的源文件,并通过规则获取网页中符合规则的数据
比如:mail爬虫
Stringmailreg="[a-zA-Z0-9]{6-12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
正则表达式中组的含义:将部分进行封装以便重用。\\num反响引用指定组
二、部分功能及代码实现
1、登陆界面中的部分功能的验证
//校验方法
function check(inputNode,regex,divId){
var b=false;
var divNode=document.getElementById(divId);
if(regex.test(inputNode.value))
{
inputNode.className="norm";
divNode.style.display="none";
b=true;
}
else
{
inputNode.className="error";
divNode.style.display="block";
}
return b;
}
//校验用户
function checkUser(userNode)
{
var regex=/^\w{3,5}$/; //定义校验用户正则表达式
return check(userNode,regex,"userdiv");
}
//校验密码
function checkPsw(pswNode)
{
var regex=/^[a-z0-9]{3,5}$/i; //定义校验密码正则表达式
return check(pswNode,regex,"pswdiv");
}
//校验确认密码
function checkRepsw(repswNode)
{ //确认密码需要从密码框和确认密码框取值,并验证是否相同,不需要正则表达式
var b=false;
var value1=repswNode.value;
var value2=document.getElementsByName("psw")[0].value;
var divNode=document.getElementById("repswdiv");
if(value1==value2)
{
repswNode.className="norm";
divNode.style.display="none";
b=true;
}
else
{
repswNode.className="error";
divNode.style.display="block";
}
return b;
}
//校验邮箱
function checkMail(mailNode)
{
var regex=/^\w+@\w+(\.\w+)+$/; //定义校验邮箱正则表达式
return check(mailNode,regex,"maildiv");
}
function checkform(formNode)
{with(formNode)
{
if(checkUser(user) && checkPsw(psw) && checkRepsw(repsw) && checkMail(mail))
event.returnValue=true;
else
event.returnValue=false;
}
}
//校验用户 老式的
function checkUserDemo(userNode)
{
var value=userNode.value;
var regex=/^\w{3,5}$/; //定义校验用户正则表达式
var divNode=document.getElementById("userdiv"); //获取用户框的值
if(regex.test(value)) //判断是否符合正则表达式的要求
{
userNode.className="norm";
divNode.style.display="none";
}
else
{
userNode.className="error";
divNode.style.display="block";
}
}
2、对qq号码进行校验
要求:5-15 0不能开头 只能数数字
public static void checkQQ()
{
String qq="12345";
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+"...is 不合法");
}
3、输出字符串中字符长度为3的字符串
public static void getDemo()
{
String str="ming tian fang jia wer qds fga";
String reg="\\b[a-z]{3}\\b";
//将规则封装成对象
Pattern p=Pattern.compile(reg);
//让正则对象和要作用的字符串想关联,获取匹配其对象
Matcher m=p.matcher(str);
//m.find();//将规则作用到字符串上,并进行复核规则的子串查找
//System.out.println(m.group());//用于获取匹配后的结果
while(m.find())
{
System.out.println(m.group()+"..."+m.start()+"...."+m.end());
}
}
4、将下列字符串转成:我要学编程
到底四种功能中哪一种呢?或者那几个呢
思路:
( 1)如果只想知道该字符串是否是错,使用匹配
(2)如果将已有的字符串变成另一个字符串,替换
(3)想要按照自定义的方式将字符串变成多个字符串。切割。获取规则以外的子串
(4)想要拿到符合要求的字符串,获取。获取符合规则的子串
public static void test_1()
{
String str="我我...我我...我要...要要...学学学...学学..编编...程程";
/*
* 将已有字符串变成另一个字符串。使用替换
* 1,可以先将。去掉
* 2,在将多个重复的内容变成单个内容
*
* */
str =str.replaceAll("\\.+","");
System.out.println(str);
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
5、 将ip地址进行地址段顺序排序
192.68.1.254
102.49.23.13
10.10.10.10
2.2.2.2
8.109.90.30
还按照字符串自然顺序,只要让他们每一段都是3位即可
1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证3位。
2,将每一段只保留3位,这样,所有ip地址都是每一段三位
public static void ipSort()
{ String ip="192.68.1.254 102.49.23.3 10.10.10.10 2.2.2.2 8.109.90.30";
ip=ip.replaceAll("(\\d+)", "00$1");
System.out.println(ip);
ip=ip.replaceAll("0*(\\d{3})","$1");
System.out.println(ip);
String[] arr=ip.split(" +");
TreeSet<String> ts=new TreeSet<String>();
for(String s:arr)
{
ts.add(s);
}
for(String s:ts)
{ s=s.replaceAll("0*(\\d+)","$1");
System.out.println(s);
}
}