-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

正则表达式

正则表达式:符合一定规则的表达式
 
 作用;专门操作字符串
 好处: 可以简化对字符串的复杂操作
 特点; 用于一些特定的符号来表示一些代码操作,这样就简化书写。
 所以学习正则表达式及时学习一些特殊符号应用。
 
 弊端: 符号定义越多,正则越长,不易阅读

具体功能:
 1,匹配   String  matches 方法
 
 对qq号进行校验
 要求:5-13  0不能开头   只能是数字
 
 [abc]取一个字母只能是abc中一个
 [^abc]除了abc都可以
 [abc][a-z]第一个字母只能是abc中一个,第二个是小写字母
 [a-zA-Z]字母
 [0-9]数字或者\\d,不是数字\\D
 \\w 单词符[a-zA-Z_0-9]
 \\W 非单词
 
 ? 一次或一次也没有
 * 0次或多次  [a-zA-Z]\\d* -- b124
 +  一次或多次
 {n} 恰好n次
 {n,} 最少n此
 {n,m} 最少n次,不超过m次[a-zA-Z]\\d{3,8}
 
 
 2,切割  String   split
  一次或多次切割,多空格切割
  String str ="zhangsan    lisi  wangwu";
String reg =" +";

表示任意符号   .  点\\.
 String str ="zhangsan.lisi.wangwu";
 String reg="\\.";
 
 切反斜扛
 str="c:\\abc\\a.txt";
 String reg="\\\\";
 
 切叠词
 str="sdfddkllldfsdff1";
 String reg="(.)\\1";
 String reg="(.)\\1+";多个叠在一起也可以切
 (()(())) 四个组 第一个从最左边开始,查左括号几个就是几组,
 
 
 3,替换
String str ="dsfl8394289035dksjf29239048290";//将数字变成#号
String reg ="\\d{5,}";//连续5个以上数字替换成#
String s = str.replaceAll(reg, "#"); 
 
String str ="dsfl888839428dsfhwjjelllfssoe9035dksjf29239048290";//将叠词变成*号
String reg ="(.)\\1+";
String s = str.replaceAll(reg, "*");
 
String str ="dsfl888839428dsfhwjjelllfssoe9035dksjf29239048290";//将重复字母变成单字母
String reg ="(.)\\1+";

4,获取
 
import java.util.Iterator;

public class RegexDemo {

public static void main(String[] args) {
replace();

//3,替换
public static void replace()
{
/*String str ="dsfl8394289035dksjf29239048290";//将数字变成#号
String reg ="\\d{5,}";//连续5个以上数字替换成#
String s = str.replaceAll(reg, "#");*/

/*String str ="dsfl888839428dsfhwjjelllfssoe9035dksjf29239048290";//将叠词变成*号
String reg ="(.)\\1+";*/

String str ="dsfl888839428dsfhwjjelllfssoe9035dksjf29239048290";//将重复字母变成单字母
String reg ="(.)\\1+";

String s = str.replaceAll(reg, "$1");
System.out.println(s);
}

//2,切割
public static void split()
{
String str ="zhangsan.lisi.wangwu";
str="c:\\abc\\a.txt";
str="sdfddkllldfsdff1";

//String reg =" +";
//String reg="\\.";
//String reg="\\\\";
String reg="(.)\\1";

String [] arr =str.split(reg);
for(String s :arr)
{
System.out.println(s);
}

}

//匹配手机号13xxx  15xxx  18xxx
public static void check2()
{
String tel ="13548946848";
String regex ="1[358]\\d{9}";
System.out.println(tel.matches(regex));
}
public static void check1()
{
String qq ="52416a5";
String regex ="[1-9][0-9]{4,14}";
boolean flag =qq.matches(regex);
if(flag)
{
System.out.println(qq);
}
else
{
System.out.println("非法");
}
}
public static void check()
{
String qq ="45255a";
int  len =qq.length();
if(len >=5 && len <=13)
{
if(!qq.startsWith("0"))
{
//这种方法,使用了string类中的方法,进行组合完成需求,代码过于复杂
try{
long l =Long.parseLong(qq);
System.out.println("qq:"+l);
}
catch(Exception e)
{
System.out.println("出现非法字符");
}

/*char[] arr = qq.toCharArray();
boolean flag = true;
for (int i = 0; i < arr.length; i++) 
{
if(!(arr[i]>='0'&& arr[i]<= '9'))
{
flag = false;
break;
}
}
if(flag)
{
System.out.println(qq);
}
else
{
System.out.println("出现非法字符");
}*/

}
else
{
System.out.println("不能以0开头");
}

}
else
{
System.out.println("长度有误");
}
}

}
--
package Regex;

正则表达式的第四个功能
 获取,将字符串中的符合规则的子串取出
 先find 在group
 
 步骤
 1,将正则表达式封装成对象
 2,让正则对象和要操作的字符串相关联
 3,关联后,获取正则匹配引擎
 4,通过引擎对符合规则的子串进行操作,比如取出。
 
import java.util.regex.*;
public class RefexDemo2 {

public static void getDemo()
{
String str ="ming tian jiu yao hui jia le";
String reg ="\\b[a-z]{3}\\b";//加上单词边界
//将规则封装成对象
Pattern p =Pattern.compile(reg);

//让正则对象和要作用的字符串想关联
Matcher m = p.matcher(str);
//起始String类中的matches方法,就是pattern和matcher对象;来完成的只不过被string方法封装。

// boolean b =m.find();//将规则作用在字符串上,并进行符合规则查找
// System.out.println(b);
// System.out.println(m.group());//group 用于获取匹配后的结果

while(m.find())
{
System.out.println(m.group());
//得到的字符串角标
System.out.println(m.start()+"--"+m.end());
}

}
public static void main(String[] args) {
getDemo();
}

}
--
package Regex;

import java.util.TreeSet;

到底用四中方法中的哪一个,或者几个
 思路分析
 1,如果只想知道该字符串是对错,使用匹配
 
 2,想要将已有的字符串变成另一个字符串,替换
 
 3,想要安装自己的方式将字符串变成多个字符串,切割,获取以外的子串
 
 4,想要拿到符合需求的字符串,获取,获取符合规则子串
 
public class RegexDemo3 {

public static void main(String[] args) {

String str="我我...我我...我要...要要...学学学...编程..遍.程";
/*
将已有字符串变成另一个字符串,使用替换
1,可以先将.去掉。
2,在将多个重复内容变成单个内容。
*/
str= str.replaceAll("\\.+", "");
System.out.println(str);
str =str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
ipSort();
checkMail();
}

192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
将ip地址进行地址段顺序排序。
   
public static void ipSort()
{
String ip ="192.68.1.254 102.49.23.013 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)
{
System.out.println(s.replaceAll("0*(\\d+)", "$1"));
}

}

对邮件地址进行校验
匹配
 
public static void checkMail()
{
String mail ="abc123@sina.com.cn";
String reg ="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确匹配
reg="\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配
System.out.println(mail.matches(reg));

}
}
--
//网页爬虫
//获取指定文档中的邮件地址
//使用获取功能,pattern,matcher
public class RegexDemo4 {

public static void main(String[] args)throws Exception
{
BufferedReader bfr = new BufferedReader(new FileReader("mail.txt"));

String line =null;
String mailreg ="\\w+@\\w+(\\.\\w+)+";
Pattern p =Pattern.compile(mailreg);

while((line = bfr.readLine())!=null)
{
Matcher m =p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
//网页版爬虫
public static void getmail1()throws Exception
{
URL url =new URL("网址");
URLConnection coon =url.openConnection();
BufferedReader bfr =new BufferedReader(new InputStreamReader(coon.getInputStream()));
String line =null;

String mailreg ="\\w+@\\w+(\\.\\w+)+";
Pattern p =Pattern.compile(mailreg);

while((line = bfr.readLine())!=null)
{
Matcher m =p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
}

-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

黑马程序员-----Java基础-----正则表达式相关推荐

  1. 黑马程序员-Java基础-正则表达式

    ------- android培训.java培训.期待与您交流! ---------- 一.概述: 正则表达式:符合一定规则的表达式. 作用:用于专门操作字符串.可以简化对只付出的复杂操作. 特点:用 ...

  2. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  3. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  4. 黑马程序员--Java基础加强篇

    开发工具使用 --------------------------------------------------------------------------------------------- ...

  5. 黑马程序员-Java基础:面向对象(上)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.面向对象概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的 ...

  6. 黑马程序员-Java基础知识预备之Java流程控制与数组

    -------- android培训.java培训.期待与您交流!---------- 本博文涉及的主要内容如下: if语句 switch语句 循环结构 循环结构的控制 数组类型 数组在内存中的运行机 ...

  7. 黑马程序员—java基础总结1

    ------- android培训.java培训.期待与您交流! ---------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用 ...

  8. 黑马程序员 — JAVA基础 — 内部类、异常

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.内部类 1.概念: 把类定义在另一个类的内部,该类就被称为内部类. Eg:把 ...

  9. 黑马程序员-Java基础加强之枚举

    --------- android培训.java培训.期待与您交流!---------- 一.为什么要有枚举? 问题:要定义季节.星期向或性别的变量,该怎么定义?假设用1-4分别表示春.夏.秋.冬,但 ...

最新文章

  1. hdu1305Immediate Decodability(字典树)
  2. 逆生长!小鼠「逆龄疗法」登Nature子刊,有望用于人类
  3. python数据帧_Python数据帧
  4. 程序员的你是否熟练掌握Chrome开发者工具?
  5. 在Jersey 2中进行集成测试自定义验证约束
  6. 进程间同步(互斥量、信号量)
  7. 云原生时代业务架构的变革:从单体迈向Serverless
  8. ASP.NET2.0文件上传以及图片处理总结篇 [转]
  9. 区块链之比特币的私钥,公钥和地址是什么?
  10. Selenium WebDriver 与 iOS 自动化测试 (做了一些初步的工具对比)
  11. 全球DDOS安全防护
  12. 分享一个MentoHUST for Windows 锐捷认证使用方法,实现不用猎豹wifi第三方流氓软件破解校园网wifi共享限制。
  13. kali安装百度网盘客户端
  14. c语言如何文件指针指向开头,fseek设置好文件指针 在C语言中fseek()的功能
  15. python 经典图书排行榜_书榜 | 计算机书籍(5.4-5.10)销售排行榜
  16. 海淘也疯狂 跨境电商网站8月监测报告
  17. PHP做一个直角三角形,三角形角度(直角三角形懒人计算器)
  18. 【IIS】XP系统的IIS发布
  19. slam十四讲,ch5joinmap报错,已解决
  20. 58上租房显示服务器异常,“58同城租房信息”满是套路,你中招了吗?

热门文章

  1. 软件测试初级测试之编写测试用例
  2. 2016年上半年总结
  3. UI设计|PS软件操作应用——GIF动图
  4. swagger的分组注释
  5. 企业电子招标采购系统源码及功能清单
  6. 【Unity3D】场景切换、全屏/恢复切换、退出游戏、截屏
  7. 软件设计七大原则:(四)接口隔离原则
  8. 程序设计基础期中检测
  9. appstore 上传屏幕快照尺寸
  10. php探针批量拿shell,地下黑产:自动批量SHELL一条龙