黑马程序员-------------------java基础--------------------正则表达式
2015-08-12 13:55
423 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
第一讲 正则表达式概述
1、其实是用来操作字符串的一些规则
1.1、好处:正则的出现,对字符串的复杂操作变得更为简单。
1.2、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,
就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
1.3、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。其实更多是用正则解决字符串操作的问题。
1.4、组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。
只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。
2、常见操作
2.1、匹配:其实用的就是String类中的matches方法。
字符
\t 制表符
\n 换行
\r 回车符
\f 换页符
字符类
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否定)
[a-zA-Z] a-z或者A-Z,两端字母包含在内
[a-d[m-p]] a-d或m-p
[a-z&&[^bc]] a-z 除了bc
预定义字符类
\d 数字[0-9]
\D 非数字[^0-9]
\s 空白字符
\S 非空白字符
\w 单词字符
\W 非单词字符
边界器匹配
^ 行的开头
$ 行的结尾
\b 单词的边界
\B 非单词的边界
\A 输入的开头
\z 输入的结尾
Greedy数量词
X? 表示有一次或没有
X* 标示有0次或多次
X+ 表示有一次或多次
X{n} 恰好n次
X{n,} 至少n次
X{n,m} 至少n次,不超过m次
2.2 切割:
其实用的就是String类中的split方法。
. 表示任意字符,在正则中用加入\\.
c:\\abc\\dd
正则中用\\切割时,regex="\\\\"
按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组
用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则
定义成"(.)\\1+"
2.3、替换:
其实用的就是String类中的replaceAll();
2.4,获取:
1,先要将正则表达式编译成正则对象。使用的是Pattern中静态方法compile(regex);
2,通过Pattern对象获取Matcher对象。Pattern用于描述正则表达式,可以对正则表达式进行解析。而将规则操作字符串,
需要从新封装到匹配器对象Matcher中。然后使用Matcher对象的方法来操作字符串。如何获取匹配器对象呢?
通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。
3,使用Matcher对象中的方法即可对字符串进行各种正则操作。
注意 :
1、想要知道该字符是否正确,使用匹配
2、想要将一个字符串变成另一个字符串,使用替换
3、想要将字符串按规则变成多个字符串,用切割
4、想要拿到符合要求的字符子串,用获取
-------------------------------------------------
*/
import java.util.regex.*;
//需求:对qq进行校验,5-15位,0不能开头,不包含字母
/*
class RegexTest
{
public static void main(String[] args)
{
String qq="012565365371";
checkQQ1(qq);
checkQQ2(qq);
}
//定义方法对qq校验,运用正则
public static void checkQQ1(String str)
{
//5-15位,0不能开头,不包含字母
String regex="[1-9][0-9]{4,14}";
//返回boolean型
boolean flag=str.matches(regex);
if(flag)
System.out.println(str);
else
System.out.println("不合法");
}
//不用正则表达式
public static void qqCheck2(String qq)
{
if (!qq.startsWith("0"))
{
if (qq.length()>=5&&qq.length()<=15)
{
try
{
Long l=Long.parseLong(qq);//利用封装基本数据类型出现非数字报异常的特点
System.out.println(qq);
}
catch (NumberFormatException e)
{
System.out.println("包含非法字符!");
}
}
else
System.out.println("你输入的长度非法!");
}
else
System.out.println("没有0开头的号码,请重输!");
}
}
//对比很明显,不用正则非常麻烦。
--------------------------------------------
*/
//切割练习
/*
class RegexTest
{
public static void main(String[] args)
{
spiltDemo("c:\\abc\\dd","\\\\");
//按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组
用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则
定义成"(.)\\1+
spiltDemo("dgyggggiiuioookm","(.)\\1+");
}
//定义切割方法
public static void spiltDemo(String str,String regex)
{
//按正则来切割
String []arr=str.spilt(regex);
for (String s: arr )
{
System.out.println(s);
}
}
}
----------------------------------------------
*/
//替换练习
/*
class RegexTest
{
public static void main(String[] args)
{
//将连续5个以上数字替换成*
replaceAllDemo("atdft5365473jhbh","\\d{5,}","*");
//将重叠部分替换成单个字母
replaceAllDemo("dystyyyyyifijjjoi","(.)\\1+","$1");
}
//定义切割方法
public static void replaceAllDemo(String str,String regex,String newstr)
{
//按正则来切割
str=str.replaceAll(regex,newstr);
System.out.println(str);
}
}
*/
--------------------------------------------------------------
//获取练习
/*
class RegexTest
{
public static void main(String[] args)
{
String str="ming tian jiu fang jia le ";
//取出连续的三个字母的单词
String regex="\\b[a-z]{3}\\b";
//将规则封装成对象
Pattern p=Pattern.compile(regex);
//让规则与要作用的字符串向关联
Matcher m=p.matcher(str);
//让规则作用到字符串上
while (m.find())
{
//获取匹配后的结果
System.out.println(m.group());
}
}
}
*/
--------------------------------------------
//将下列字符串转成,我要学编程
/*
class RegexTest
{
public static void main(String[] args)
{
String str="我我...我我我....要要...要要...要学学...学学...学编编...编编....编...程程...程程程";
str=str.replaceAll("\\.+","");
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
}
*/
---------------------------------------------
//对邮箱进行校验
/*
class RegexTest
{
public static void main(String[] args)
{
String str="agf123@sina.com";
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
System.out.println(str.matches(regex));
}
}
*/
----------------------------------
//网页爬虫
/*
class RegexTest
{
public static void main(String[] args)
{
BufferedReader br=null;
try
{
br=new BufferedReader(new FileReader("mail.txt"));
String line=null;
while ((line=br.readLine())!=null)
{
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
///将规则封装成对象
9eda
Pattern p=Pattern.compile(regex);
//让规则与要作用的字符串向关联
Matcher m=p.matcher(line);
//让规则作用到字符串上
while (m.find())
{
//获取匹配后的结果
System.out.println(m.group());
}
}
}
catch (Exception e)
{
throw new RuntimeException("读取失败');
}
finally
{
try
{
if(br!=null)
br.close();
}
catch (Exception e)
{
throw new RuntimeException("关闭失败');
}
}
}
}
*/
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
第一讲 正则表达式概述
1、其实是用来操作字符串的一些规则
1.1、好处:正则的出现,对字符串的复杂操作变得更为简单。
1.2、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,
就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
1.3、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。其实更多是用正则解决字符串操作的问题。
1.4、组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。
只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。
2、常见操作
2.1、匹配:其实用的就是String类中的matches方法。
字符
\t 制表符
\n 换行
\r 回车符
\f 换页符
字符类
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否定)
[a-zA-Z] a-z或者A-Z,两端字母包含在内
[a-d[m-p]] a-d或m-p
[a-z&&[^bc]] a-z 除了bc
预定义字符类
\d 数字[0-9]
\D 非数字[^0-9]
\s 空白字符
\S 非空白字符
\w 单词字符
\W 非单词字符
边界器匹配
^ 行的开头
$ 行的结尾
\b 单词的边界
\B 非单词的边界
\A 输入的开头
\z 输入的结尾
Greedy数量词
X? 表示有一次或没有
X* 标示有0次或多次
X+ 表示有一次或多次
X{n} 恰好n次
X{n,} 至少n次
X{n,m} 至少n次,不超过m次
2.2 切割:
其实用的就是String类中的split方法。
. 表示任意字符,在正则中用加入\\.
c:\\abc\\dd
正则中用\\切割时,regex="\\\\"
按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组
用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则
定义成"(.)\\1+"
2.3、替换:
其实用的就是String类中的replaceAll();
2.4,获取:
1,先要将正则表达式编译成正则对象。使用的是Pattern中静态方法compile(regex);
2,通过Pattern对象获取Matcher对象。Pattern用于描述正则表达式,可以对正则表达式进行解析。而将规则操作字符串,
需要从新封装到匹配器对象Matcher中。然后使用Matcher对象的方法来操作字符串。如何获取匹配器对象呢?
通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。
3,使用Matcher对象中的方法即可对字符串进行各种正则操作。
注意 :
1、想要知道该字符是否正确,使用匹配
2、想要将一个字符串变成另一个字符串,使用替换
3、想要将字符串按规则变成多个字符串,用切割
4、想要拿到符合要求的字符子串,用获取
-------------------------------------------------
*/
import java.util.regex.*;
//需求:对qq进行校验,5-15位,0不能开头,不包含字母
/*
class RegexTest
{
public static void main(String[] args)
{
String qq="012565365371";
checkQQ1(qq);
checkQQ2(qq);
}
//定义方法对qq校验,运用正则
public static void checkQQ1(String str)
{
//5-15位,0不能开头,不包含字母
String regex="[1-9][0-9]{4,14}";
//返回boolean型
boolean flag=str.matches(regex);
if(flag)
System.out.println(str);
else
System.out.println("不合法");
}
//不用正则表达式
public static void qqCheck2(String qq)
{
if (!qq.startsWith("0"))
{
if (qq.length()>=5&&qq.length()<=15)
{
try
{
Long l=Long.parseLong(qq);//利用封装基本数据类型出现非数字报异常的特点
System.out.println(qq);
}
catch (NumberFormatException e)
{
System.out.println("包含非法字符!");
}
}
else
System.out.println("你输入的长度非法!");
}
else
System.out.println("没有0开头的号码,请重输!");
}
}
//对比很明显,不用正则非常麻烦。
--------------------------------------------
*/
//切割练习
/*
class RegexTest
{
public static void main(String[] args)
{
spiltDemo("c:\\abc\\dd","\\\\");
//按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组
用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则
定义成"(.)\\1+
spiltDemo("dgyggggiiuioookm","(.)\\1+");
}
//定义切割方法
public static void spiltDemo(String str,String regex)
{
//按正则来切割
String []arr=str.spilt(regex);
for (String s: arr )
{
System.out.println(s);
}
}
}
----------------------------------------------
*/
//替换练习
/*
class RegexTest
{
public static void main(String[] args)
{
//将连续5个以上数字替换成*
replaceAllDemo("atdft5365473jhbh","\\d{5,}","*");
//将重叠部分替换成单个字母
replaceAllDemo("dystyyyyyifijjjoi","(.)\\1+","$1");
}
//定义切割方法
public static void replaceAllDemo(String str,String regex,String newstr)
{
//按正则来切割
str=str.replaceAll(regex,newstr);
System.out.println(str);
}
}
*/
--------------------------------------------------------------
//获取练习
/*
class RegexTest
{
public static void main(String[] args)
{
String str="ming tian jiu fang jia le ";
//取出连续的三个字母的单词
String regex="\\b[a-z]{3}\\b";
//将规则封装成对象
Pattern p=Pattern.compile(regex);
//让规则与要作用的字符串向关联
Matcher m=p.matcher(str);
//让规则作用到字符串上
while (m.find())
{
//获取匹配后的结果
System.out.println(m.group());
}
}
}
*/
--------------------------------------------
//将下列字符串转成,我要学编程
/*
class RegexTest
{
public static void main(String[] args)
{
String str="我我...我我我....要要...要要...要学学...学学...学编编...编编....编...程程...程程程";
str=str.replaceAll("\\.+","");
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
}
*/
---------------------------------------------
//对邮箱进行校验
/*
class RegexTest
{
public static void main(String[] args)
{
String str="agf123@sina.com";
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
System.out.println(str.matches(regex));
}
}
*/
----------------------------------
//网页爬虫
/*
class RegexTest
{
public static void main(String[] args)
{
BufferedReader br=null;
try
{
br=new BufferedReader(new FileReader("mail.txt"));
String line=null;
while ((line=br.readLine())!=null)
{
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
///将规则封装成对象
9eda
Pattern p=Pattern.compile(regex);
//让规则与要作用的字符串向关联
Matcher m=p.matcher(line);
//让规则作用到字符串上
while (m.find())
{
//获取匹配后的结果
System.out.println(m.group());
}
}
}
catch (Exception e)
{
throw new RuntimeException("读取失败');
}
finally
{
try
{
if(br!=null)
br.close();
}
catch (Exception e)
{
throw new RuntimeException("关闭失败');
}
}
}
}
*/
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
相关文章推荐
- msql 正则表达式
- 正则表达式
- Mootools 1.2教程 正则表达式
- 批处理FINDSTR正则表达式用法实例分析
- vbs正则表达式代码
- php中看实例学正则表达式
- PHP正则表达式之定界符和原子介绍
- PHP下常用正则表达式整理
- 批处理 正则表达式(findstr) 整理
- JavaScript类型系统之正则表达式
- javascript中的正则表达式使用指南
- 学习正则帮手笨狼正则练习器
- java正则表达式应用的实例代码
- ruby 正则表达式 教程
- PHP中的正则表达式函数介绍
- javascript replace方法与正则表达式
- PowerShell中使用正则表达式筛选数组实例
- 关于Perl里面正则表达式规范
- PERL 正则表达式详细说明
- JavaScript通过正则表达式实现表单验证电话号码