正则表达式
正则表达式是在JDK1.4之后才加入到java中,如果在1.4之前java中想要使用正则表达式的话,就必须要去apache的网站上下载一个正则表达式的开发包, 正则表达式最早是在PHP使用并得到广泛的好评,主要的功能是进行一些复杂字符串的校验。正则的规则基本上在每一门语言中都可以使用。
例子:使用普通的方式去验证一串字符串是否全部为数组
package com.test.regex;
public class RegexDemo01 { public static void main(String[] args) { String s = "13423a42565467568"; char c[] = s.toCharArray(); boolean bool = true; for (int i = 0; i < c.length; i++) { if(!(c[i]>='0' && c[i]<='9')){//只要有一个元素不再0-9之间吗,那么我们说字符串不是全部由数字组成 bool = false; break; } } if(bool){ System.out.println("字符串全部由数字组成"); }else{ System.out.println("字符串不全部由数字组成"); } } }
|
使用正则:
package com.test.regex;
public class RegexDemo02 { public static void main(String[] args) { String s = "1342342565467568"; if(s.matches("\\d+")){ System.out.println("字符串全部由数字组成"); }else{ System.out.println("字符串不全部由数字组成"); } } }
|
正则表达式:
Pattern 类,列出了全部的正则表达式的内容
主要的正则内容:
·字符匹配:
编号 |
正则内容 |
描述 |
1 |
[abc] |
表示取值可能是a或b或c |
2 |
[^abc] |
表示取值不可能是a或b或c |
3 |
[a-zA-Z] |
表示全部由字母组成,大小写都可以 |
·简短表达式
编号 |
正则内容 |
描述 |
1 |
\d |
表示由数字组成 |
2 |
\D |
表示由非数字组成 |
3 |
\s |
表示由空格组成\n \t |
4 |
\S |
表示由非空格组成 |
5 |
\w |
表示由数字字母下划线组成 |
6 |
\W |
表示由非数字字母下划线组成 |
·列出出现次数的表达式
X? |
X,一次或一次也没有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超过 m 次 |
·关系
XY |
X 后跟 Y |
X|Y |
X 或 Y |
手机号码的验证:
package com.test.regex;
public class RegexDemo3 { public static void main(String[] args) { String s = "12515967537"; if(s.matches("1(3|4|5|8)\\d{9}")){ System.out.println("是手机号码"); }else{ System.out.println("不是手机号码"); } } }
|
Pattern类:是正则操作最重要的一个类,所有的正则规范都需要在Pattern类进行规定。
Matcher类:进行正则匹配
·取得Pattern的实例:public static Pattern compile(String regex)
·取得Matcher类的实例:public Matcher matcher(CharSequence input)
·进行字符串拆分:public String[] split(CharSequence input)
·进行字符串的替换:public String replaceAll(String replacement)
范例1:进行字符串的校验
package com.test.regex;
import java.util.regex.Matcher; import java.util.regex.Pattern;
public class RegexDemo4 { public static void main(String[] args) { String s = "13515967537"; Pattern p = Pattern.compile("1(3|4|5|8)\\d{9}");//定义规则 Matcher m = p.matcher(s);//s需要匹配的字符串 if(m.matches()){ System.out.println("是手机号码"); }else{ System.out.println("不是手机号码"); } } }
|
范例2:字符串拆分“abc123qwe9008sdf109werqwer220mmnnhni12580uh”
package com.test.regex;
import java.util.regex.Pattern;
public class RegexDemo5 { public static void main(String[] args) { String s = "abc123qwe9008sdf109werqwer220mmnnhni12580uh"; Pattern p = Pattern.compile("\\d+");//定义规则 String str[] = p.split(s);//进行拆分 for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } } }
|
范例3:进行字符串的替换
package com. test.regex;
import java.util.regex.Matcher; import java.util.regex.Pattern;
public class RegexDemo06 { public static void main(String[] args) { String s = "abc123qwe9008sdf109werqwer220mmnnhni12580uh"; Pattern p = Pattern.compile("\\d+");//定义规则 Matcher m = p.matcher(s);//s需要匹配的字符串 s = m.replaceAll("中国您好"); System.out.println(s); } } |
Pattern:主要用于定义正则规范,并进行字符串拆分
Matcher:主要作用是用于正则的校验,并进行字符串的替换
String类对正则的支持:java在JDK1.4之后加入了正则表达式,随后更新了String类的操作,而使得某些操作不需要对Pattern和Matcher类进行实例化,使用String类的方法就可以了。
·public boolean matches(String regex):进行正则的匹配
·public String replaceAll(String regex, String replacement):根据规定的正则进行替换
·public String replaceFirst(String regex, String replacement):根据正则替换第一个匹配正则的字符串
·public String[] split(String regex):根据规定的正则进行字符串的分割
范例:替换
package com.test.regex; public class RegexDemo07 { public static void main(String[] args) { String s = "abc123qwe9008sdf109werqwer220mmnnhni12580uh"; s = s.replaceAll("\\d+", "中国您好"); System.out.println(s); } }
|
范例:替换第一个匹配正则的字符串
package com.test.regex; public class RegexDemo07 { public static void main(String[] args) { String s = "abc123qwe9008sdf109werqwer220mmnnhni12580uh"; s = s.replaceFirst("\\d+", "中国您好"); System.out.println(s); } }
|
范例:进行字符串分割
package com.test.regex; public class RegexDemo07 { public static void main(String[] args) { String s = "abc123qwe9008sdf109werqwer220mmnnhni12580uh"; String str[] = s.split("\\d+");//进行拆分 for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } } }
|