黑马程序员-----Java基础-----正则表达式
-----<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基础-----正则表达式相关推荐
- 黑马程序员-Java基础-正则表达式
------- android培训.java培训.期待与您交流! ---------- 一.概述: 正则表达式:符合一定规则的表达式. 作用:用于专门操作字符串.可以简化对只付出的复杂操作. 特点:用 ...
- 黑马 程序员——Java基础---流程控制
黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...
- 黑马 程序员——Java基础---IO(下)
黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...
- 黑马程序员--Java基础加强篇
开发工具使用 --------------------------------------------------------------------------------------------- ...
- 黑马程序员-Java基础:面向对象(上)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.面向对象概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的 ...
- 黑马程序员-Java基础知识预备之Java流程控制与数组
-------- android培训.java培训.期待与您交流!---------- 本博文涉及的主要内容如下: if语句 switch语句 循环结构 循环结构的控制 数组类型 数组在内存中的运行机 ...
- 黑马程序员—java基础总结1
------- android培训.java培训.期待与您交流! ---------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用 ...
- 黑马程序员 — JAVA基础 — 内部类、异常
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.内部类 1.概念: 把类定义在另一个类的内部,该类就被称为内部类. Eg:把 ...
- 黑马程序员-Java基础加强之枚举
--------- android培训.java培训.期待与您交流!---------- 一.为什么要有枚举? 问题:要定义季节.星期向或性别的变量,该怎么定义?假设用1-4分别表示春.夏.秋.冬,但 ...
最新文章
- hdu1305Immediate Decodability(字典树)
- 逆生长!小鼠「逆龄疗法」登Nature子刊,有望用于人类
- python数据帧_Python数据帧
- 程序员的你是否熟练掌握Chrome开发者工具?
- 在Jersey 2中进行集成测试自定义验证约束
- 进程间同步(互斥量、信号量)
- 云原生时代业务架构的变革:从单体迈向Serverless
- ASP.NET2.0文件上传以及图片处理总结篇 [转]
- 区块链之比特币的私钥,公钥和地址是什么?
- Selenium WebDriver 与 iOS 自动化测试 (做了一些初步的工具对比)
- 全球DDOS安全防护
- 分享一个MentoHUST for Windows 锐捷认证使用方法,实现不用猎豹wifi第三方流氓软件破解校园网wifi共享限制。
- kali安装百度网盘客户端
- c语言如何文件指针指向开头,fseek设置好文件指针 在C语言中fseek()的功能
- python 经典图书排行榜_书榜 | 计算机书籍(5.4-5.10)销售排行榜
- 海淘也疯狂 跨境电商网站8月监测报告
- PHP做一个直角三角形,三角形角度(直角三角形懒人计算器)
- 【IIS】XP系统的IIS发布
- slam十四讲,ch5joinmap报错,已解决
- 58上租房显示服务器异常,“58同城租房信息”满是套路,你中招了吗?