黑马程序员-----Java基础-----正则表达式
来源:互联网 发布:js隐藏div 编辑:程序博客网 时间:2024/06/05 16:41
-----<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基础之正则表达式
- 黑马程序员----JAVA基础之正则表达式
- 黑马程序员-JAVA基础-正则表达式
- 黑马程序员:Java基础总结----正则表达式
- 黑马程序员 java基础回顾---正则表达式
- <<黑马程序员>>java基础之正则表达式
- 黑马程序员--java基础--正则表达式总结
- 黑马程序员---Java基础总结---正则表达式
- 【黑马程序员】java基础_正则表达式
- 黑马程序员-----java基础 正则表达式
- 黑马程序员-->Java基础-->正则表达式
- 黑马程序员-java基础之正则表达式
- 黑马程序员--java基础--正则表达式
- 黑马程序员 Java基础之正则表达式
- 黑马程序员 java基础之正则表达式
- Java基础---正则表达式 (黑马程序员)
- 黑马程序员--java基础之正则表达式
- ASP.NET访问网络驱动器(映射磁盘)
- git常用命令
- 感知器
- iOS 本地推送 (本地通知)
- 异步GET请求方法
- 黑马程序员-----Java基础-----正则表达式
- Android 使用LeakCanary 检测内存泄露
- 页面之间传递参数的几种方法
- 【深入理解JAVA虚拟机】之运行时数据区域
- 图片拉伸 [UIImage resizableImageWithCapInsets:]使用注意
- 根据应用程序设置JVM参数(二)-优化新生代大小
- 二维数组实例
- iOS开发-loadView和viewDidLoad总结
- C++中的auto