正则表达式(最新)
来源:互联网 发布:月刃 知乎 编辑:程序博客网 时间:2024/06/14 06:03
正则表达式
作用:
字符串的匹配、字符串的替换、字符串的查找
也就是说,它的存在是给字符串操作,提供了遍历。
基础使用方法(使用matcher和pattern):
在java1.4以前,如果我们想使用正则表达式,我们就需要使用到java.util.regex包,使用这个包下的两个类,Matcher和Pattern类。
其中pattern就是我们俗称的编译类,它将我们预先写入的内容(也就是正则表达式)编译好,等到你通过matcher来匹配的时候就可以直接使用了。
正则表达式的构造摘要(挑出了一些比较重要的),下面就是一些基础的正则表达式的格式,你可以通过他们构造出复杂一些的内容。
\\代表反斜线字符
\n换行(如果你想匹配换行你的写成\\n,第一个表示转义后面的\)
[abc] 字符abc
[^abc] 非字符abc,除了abc
[a-zA-Z] a到z,A到Z,两头的字母包括在内
[a-d[m-p]] a到d,或者m到p
[a-z&&[def]] def字符,注意前面的不能带括号
· 匹配任意字符(不能是\n,行结束符)
\d 数字
\D 非数字
\s 空白字符(包括制表符,而\t这种格式的,如果你判断“ ”是不能替换的)
\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、创建出一个编译类对象pattern,它没有提供构造方法,我们可以通过他的的compile方法获得这么一个对象,其中的regex就是我们预先写好的匹配规则
Pattern p=Pattern.compile("regex");
2、通过编译器类获得一个匹配器对象,并将要匹配的字符串输入进去
Matcher m=p.matcher("targetstring");
3、我们可以调用匹配起类matcher的matchers方法,查看我们的目标字符串是否跟我们的要匹配的内容想匹配,但是注意,在regex处的数据中使用的数据长度如果跟目标长度一致的话,那么就会返回false。像下面的eg1代码
System.out.println(m.matches());
二、匹配规则的示范
Eg1:
Pattern p=Pattern.compile("[a-z]");
Matcher m=p.matcher("targetstring");
System.out.println(m.matches());
输出内容为false,因为我们指明的表达式只有一位[],也就是说如果targetstring是一个字母,那么它就是匹配的。因此如果我们想实现多位,可以在后面添上一个*,或者{},使用{}的在里面写入数字。就像例2
Eg2:
Pattern p=Pattern.compile("[a-z]{12}");
Matcher m=p.matcher("targetstring");
System.out.println(m.matches());
那么这种情况下使用就是正确的,因为他们位数也是一样的,同时,你也可以不写12,而写 Pattern p=Pattern.compile("[a-z]{12,}");这样表示>=12,当然你也可以在,后面写内容 Pattern p=Pattern.compile("[a-z]{12,15}");那么就表示在它们之间。
从而,我们知道,在正则表达式中,一个[]后面跟一个{},{}里面的内容就表示内容的个数。
Eg3:
+、*、?在正则表达式中的意义
Pattern p=Pattern.compile("[a-z]+");
Matcher m=p.matcher("");
System.out.println(m.matches());
我们将上述的代码修改一下,当是上述这种形式的时候,显示的内容就是false,而?却是true,*也是true。
经过多组实验,我们可以发现它们的不同意义。他们都表示满足条件的个数
+表示1-n(n表示多个),*表示0-n,而?表示0-1
当然,上面都是很简单的一些例子。写了一些基本的正则表达式的写法,下面我们来看一下他们的组合
Pattern p2=Pattern.compile("[^a-z]");
Matcher m2=p2.matcher("b");
System.out.println(m2.matches());
当我们在我们的[a-z]前面加一个^的时候就表示相反的意思,也就是原本是a到z内的数,现在表示除了a到z的数
Pattern p3=Pattern.compile("[^a-z&&[0-9]]");
Matcher m3=p3.matcher("b");
System.out.println(m3.matches());
当我们不再满足只添加一条正则表达式的时候,我们可以进行组合,其实组合的原理很简单,将要添加的内容用[]括起来,然后与原来的规则相&&或者相|都可以
Pattern p4=Pattern.compile("[a-z|[0-9]]");
Matcher m4=p4.matcher("b");
System.out.println(m4.matches());
注意,在正则表示式里面的或者只有|,而不是两根,这个特别容易犯这个错误。
好了,介绍完我们pattern类的编译规则之后,我们开始介绍我们matcher类的一些方法。
Matcher.find()方法,寻找跟正则表达式相匹配的内容,如果没找到返回false,但是注意,如果找到,你再调用Matcher.find()方法,它不会从头开始,而是会从上次找的结束位置,也就是前面一个满足条件的末尾开始查找。
Pattern p5=Pattern.compile("[a-z]");
Matcher m5=p5.matcher("a12a12a12v12");
while(m5.find()){
//特别注意,它不会重头开始,它会从上次的结束位置开始查找
System.out.println(m5.start()+" "+m5.end());
}
打印结果是0 1,3 4 ,6 7 ,9 10
Pattern p5=Pattern.compile("[a-z]");
Matcher m5=p5.matcher("a12a12a12v12");
while(m5.find()){
System.out.println(m5.start()+" "+m5.end());
System.out.println(m5.group());
}
这句代码在前面的代码中多加了打印m5.group的语句,这句语句的意思就是输出满足内容的string,它跟start、end、group、find一样都有位置的记录,不会重复的去查找,除非你每次都将它的指针指回初始位置。
Pattern p6=Pattern.compile("[a-z]");
Matcher m6=p6.matcher("a12a12a12v12");
String t=m6.replaceAll("hello");
System.out.println(t);
打印结果是hello12hello12hello12hello12,replaceall的意思就是使用传入的字符串替换所有满足内容的字符,是每一个满足的替换一次,而不是只替换一处。
好的,正则表达式在pattern和marcher中的基本用法就差不多了。而实际上在java1.4之后,String就开始支持正则表达式了,查看API我们可以发现,它也具有matcher、split、replaceall等方法,而且他们的参数名字都有一个叫regex的参数,这个参数的意思就是传入一个正则表达式。
String s="a12a12a1a12a12a";
//s.replaceAll(regex,string) regex就表示正则表达式
String f=s.replaceAll("[a-z]", "hello");
System.out.println(f);
//按照regex中的规则,将s中的小写字母都替换成为hello,
打印结果是hello12hello12hello1hello12hello12hello
String s="a12a12a1a12a12a";
//s.split(regex) regex为正则表达式
String s2[]=s.split("[a-z]");
for (String string : s2) {
System.out.println(string);
}
按照正则表达式的规则,切分字符串,后面还可跟一个整数型的数字,表示切分成为多少片s.split(regex,int)
String s="a12a12a1a12a12a";
//s,matchers(regex) regex为正则表达式
boolean b=s.matches("[a-z]");
System.out.println(b);
查看字符串是否匹配这个正则表达式。基本原则跟上面matcher方法是一样的。
- 正则表达式(最新)
- 最新手机号码正则表达式
- 正则表达式 最新 手机号码
- 最新手机号码正则表达式
- 最新 手机号码 正则表达式
- 最新手机号码正则表达式
- 最新手机号码正则表达式
- 最新手机号码正则表达式
- js最新手机号码、电话号码、身份证正则表达式(最新)
- JS正则表达式 最新手机号码正则表达式
- 解析CSV正则表达式最新
- 最新手机号码的正则表达式
- 最新手机号码验证正则表达式
- 最新电话号码验证正则表达式
- iOS最新手机号码正则表达式
- Java最新手机号正则表达式
- 最新Android手机号正则表达式
- iOS最新手机号码正则表达式
- 网站底部版权信息正确写法
- android listview checkedTextView 的使用
- 解决oracle归档日志写满了(ORA-00257)的问题
- 为什么要面向接口编程?有什么好处?
- Struts2+Hibernate3的User 关键字
- 正则表达式(最新)
- OC面试题[搜集]
- windows 程序设计 DIB(设备无关的位图)
- IPv4, IPv6,
- Java 安全性专题
- UVa:531 Compromise
- 算法导论 4.3-4
- eclipse如何修改dynamic web module version
- Unity3d的GUI排版教程-1