1、正则表达式概念

正则表达式(Regular Expression)

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

正则表达式通常被用来检索、替换那些符合某个模式的文本。

java.util.regex包中提供以下两个类对正则表达式的支持:

Matcher 类 通过解释 Pattern 对 character sequence 执行匹配操作的引擎。

Pattern 类 正则表达式的编译表示形式。


2、Pattern类

public final class Pattern extends Objectimplements Serializable

正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。

典型的调用顺序是

  1. Pattern p = Pattern.compile("a*b");
  2. Matcher m = p.matcher("aaaaab");
  3. boolean b = m.matches();

3、Matcher类

public final class Matcher extends Object implements MatchResult

Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用 Matcher类进行验证或者替换。

常用方法:

boolean matches() 尝试将整个区域与模式匹配。

String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。

String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。


4、String类对正则的支持

在JDK 1.4之后加入了正则,随后又更新了String的操作类,因为在使用正则中,所有的内容通过字符串表示的比较多。

在String类中有以下的方法可以完成对正则的支持:

boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。

String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的 第一个子字符串。

String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串


RegexDemo

  1. package com.vince;
  2. import org.junit.Test;
  3. import java.util.regex.Matcher;
  4. import java.util.regex.Pattern;
  5. /**
  6. */
  7. public class RegexDemo {
  8. @Test
  9. public void test3(){
  10. String s = "5201314";
  11. boolean b = s.matches("[0-9]+");
  12. boolean b1 = s.matches("\\d+");
  13. System.out.println(b+"-"+b1);
  14. }
  15. @Test
  16. public void test2(){
  17. //创建一个匹配模式(模板)
  18. Pattern p = Pattern.compile("a*b");
  19. Matcher matcher = p.matcher("sb");
  20. boolean b = matcher.matches();//匹配
  21. System.out.println(b);
  22. }
  23. /**
  24. * 没有使用正则表达式来检查字符串是否由数字组成
  25. */
  26. @Test
  27. public void test1(){
  28. String s = "5201314";
  29. char[] chars = s.toCharArray();
  30. boolean flag = true;
  31. for (int i = 0; i < chars.length; i++) {
  32. if(chars[i]<'0' || chars[i]>'9'){
  33. flag = false;
  34. break;
  35. }
  36. }
  37. if(flag){
  38. System.out.println("是由数字组成");
  39. }else{
  40. System.out.println("不是由数字组成");
  41. }
  42. }
  43. }

5、示例

1、验证电话号码(如:010-38389438 )

2、验证手机号码

3、验证用户名,只能是字母开头的数字、字母或下划线的组合

4、验证IP地址(如:192.168.1.1)

5、验证网址(如:http://www.baidu.com)

6、验证年龄(100以内)

7、验证金额(可以有小数位)

  1. package com.vince;
  2. import org.junit.Test;
  3. /**
  4. * 正则表达式示例
  5. */
  6. public class RegexDemo2 {
  7. @Test
  8. public void test(){
  9. // 匹配电话号码
  10. String phoneNumber = "010-38389438";
  11. boolean b = phoneNumber.matches("\\d{3,4}-\\d{7,8}");
  12. System.out.println(b);
  13. // 匹配手机号码
  14. String phone = "13895271234";
  15. System.out.println(phone.matches("[1][3-9]\\d{9}"));
  16. // 匹配用户名:字母开头,数字字母下划线组合
  17. String username = "abc1314";
  18. System.out.println(username.matches("[a-zA-Z]+[\\w|_]*"));
  19. // 匹配IP地址
  20. String ip = "20.10.20.123";
  21. System.out.println(ip.matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}"));
  22. // 匹配网址
  23. String addr = "http://www.baidu.com";
  24. System.out.println(addr.matches("http://\\w+.\\w+.\\S*"));
  25. // 匹配年龄
  26. String age = "18";
  27. System.out.println(age.matches("\\d{1,3}"));
  28. // 匹配金额
  29. String price = "19.8";
  30. System.out.println(price.matches("\\d+.\\d+"));
  31. }
  32. }