黑马程序员_正则表达式
来源:互联网 发布:wps数据透视图怎么做 编辑:程序博客网 时间:2024/05/27 00:44
------- android培训、java培训、期待与您交流! ----------
正则表达式:正则表达式就是用来代表指定字符串的一种规则(模式)。
1.正则表达式的作用:用于专门操作字符串。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。 所以学习正则表达式, 就是在学习一些特殊符号的使用。
2.特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
3.正则表达式的常见语法:
字符类:
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否定)
[a-zA-Z] a到z或A到Z,两头的字母包含在内(范围)
预定义字符类:
. 任何字符
\d 数字:[0-9] 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不超过m次
正则表达式的具体操作功能
1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
public static void ChekQQ()
{
Stringqq="297";
Stringregex="[1-9][0-9]{4,14}";
booleanflag=qq.matches(regex);//判断字符串是否匹配指定的正则表达式。
if(flag)
{
System.out.println(qq+"....isok");
}
else
{
System.out.println(qq+"....错误的qq号");
}
}
切割:String split()
class SplitDemo
{
publicstatic void main(String[] args)
{
Split_1();
Split_2();
Split_3();
Split_4();
}
publicstatic void Split_1()
{
Stringstr="zhangsan,lisi,wangwu";
Stringreg=",";//用,切
String[]arr=str.split(reg);
for(String s:arr )
{
System.out.println(s);
}
}
publicstatic void Split_2()
{
Stringstr="zhangsan lisi wangwu";
Stringreg=" +";//多个空格的split
String[]arr=str.split(reg);
for(String s:arr )
{
System.out.println(s);
}
}
publicstatic void Split_3()
{
Stringstr="c:\\my class\\demo.class";
Stringreg="\\\\";//用\\切
String[] arr=str.split(reg);
for(String s:arr )
{
System.out.println(s);
}
}
public static void Split_4()
{
Stringstr="aqaqqsdjsjccbjiio";
Stringreg="(.)\\1";//按照叠词完成切割
String[] arr=str.split(reg);
System.out.println(arr.length);
for(String s:arr )
{
System.out.println(s);
}
}
}
替换:StringreplaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
class replaceAllDemo
{
publicstatic void main(String[] args)
{
replaceAll_3();
}
publicstatic void replaceAll_1()
{
Stringstr="abc12323gjkj897k7n7";//把数字换成#
Stringreg="\\d{2,}";
Strings=str.replaceAll(reg,"#");
System.out.println(s);
}
publicstatic void replaceAll_2()
{
Stringstr="abchhyugkkkbncdddde";//把叠词换成%
Stringreg="(.)\\1+";
Strings=str.replaceAll(reg,"^");
System.out.println(s);
}
publicstatic void replaceAll_3()
{
Stringstr="aaabgkkknggge";//把叠词换成单词,kkk--->k;
Stringreg="(.)\\1+";
Strings=str.replaceAll(reg,"$1");//$特殊的符号
System.out.println(s);
}
}
获取:将字符串中的符合规则的子串取出。
操作步骤:
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。
import java.util.regex.*;
class regexDemo
{
publicstatic void main(String[] args)
{
getDemo();
}
publicstatic void getDemo()
{
Stringstr="da jia hao wo lai zi he bei";
Stringrege="\\b[a-z]{3}\\b";//单词边界\b
//将正则表达式封装成对象
Patternp=Pattern.compile(rege);
//正则表达式和要操作的字符相关联
Matcherm=p.matcher(str);
//循环查找,获取子串。
while(m.find())
{
System.out.println(m.group());
System.out.println(m.start()+".........."+m.end());
}
}
}
小练习
练习1:
需求:
将下列字符串转成:我要学编程.
到底用四种功能中的哪一个呢?或者哪几个呢?
思路方式:
1,如果只想知道该字符是否对是错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的 子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
代码如下:
class regexTest
{
publicstatic void main(String[] args)
{
Test1();
}
publicstatic void Test1()
{
Stringstr="我我我我我.....要要要....学学......学学学编编......编编程.....程";
Stringreg="\\.+";
Strings=str.replaceAll(reg,"");
System.out.println(s);
Stringreg2="(.)\\1+";
Strings2=s.replaceAll(reg2,"$1");
System.out.println(s2);
}
}
练习二:
需求:校验邮箱
代码如下:
class regexTest
{
publicstatic void main(String[] args)
{
ChekMail();
}
publicstatic void ChekMail()
{
Stringmail="abc123@sina.com.cn";
Stringreg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配
Stringreg1="\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。
System.out.println(mail.matches(reg1));
System.out.println(mail.matches(reg));
}
}
练习三:
需求:校验IP
代码如下:
import java.util.TreeSet;
class regexTest
{
publicstatic void main(String[] args)
{
ChekIP();
}
publicstatic void ChekIP()
{
Stringip="192.123.2.234 2.3.44.234127.9.0.4 67.3.2.1";
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(Strings:ts)
{
System.out.println(s.replaceAll("0*(\\d+)","$1"));
}
}
}
练习四:
需求:对手机号的校验
代码如下:
class Chek
{
publicstatic void main(String[] args)
{
ChekTel();
}
publicstatic void ChekTel()
{
String tel="15833379886";
StringTelreg="1[568]\\d{9}";
System.out.println(tel.matches(Telreg));
}
}
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_ 正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 利用samba实现Ubuntu和win7文件共享配置过程
- ToDoList的使用
- 米聊的没落
- sql
- 中兴 Grand SII现场体验
- 黑马程序员_正则表达式
- Domain Driven Design
- 字符编码笔记:ASCII,Unicode和UTF-8
- ios开发随笔记(五):Kobold2D开发遇到的编译问题
- 2013年度餐饮O2O大揭底
- codeforce 224
- 性格决定命运
- 数据结构之单链表操作
- 大数据量的处理