Java 正则初探

Wesley13
• 阅读 421

正则表达 初探*

走进沼泽

问题引出

  • 问题:判断一个String字符串是否为数字字符串

    • 将字符串转换为字符数组
    • 判断每一个字符是否在“0~9”范围之间

    public class TestDemo { public static void main(String [] args) { String str = "123" ; System.out.println(isNumber(str)); } public static boolean isNumber(String temp) { char data [] = temp.toCharArray(); for (int x = 0 ; x < data.length ; x ++ ) { if (data[x] > '9' || data[x] < '0') { return false ; } } return true; } }

  • 上述问题改用正则表达判断

    public class TestDemo { public static void main(String [] args) { String str = "123" ; System.out.println(str.matches("\d+")); } }

java.util.regex 包

Pattern 类

  • 需要使用 compile() 方法来取得类对象

Matcher 类

  • 需要 Pattern 类取得

正则标记(熟记)

java.util.regex.Pattern 中定义正则标记

字符

匹配

x

字符 x

\ \

反斜杠

\ t

制表符

\ n

换行

  • ps在正则中出现对符号的正则,均需要反斜杠进行转移(\ \)

字符集

匹配

[abc]

表示字符a,b,c中任意一位

[^abc]

表示不是字符 a,b,c 中任意的一位

[a-z]

所有的小写字母

[A-Z]

所有的大写字母

字符集表达式

匹配

.

任意一位的字符

\d

匹配一位数字“[0-9]"(在代码中两杠等于一个杠)

\D

不匹配数字 [ ^0-9 ]

\s

任意的空白字符 (\t \n ……)

\S

任意的非空白字符

\w

表示任意字母、数字、下划线 [ a-zA-Z_0-9]

\W

表示非字母、数字、下划线 [ ^a-zA-Z_0-9]

  • 边界匹配,建议在JavaScript中使用,不在java中使用

符号

匹配

^

正则的开始

$

正则的结束

  • 数量表达

    • 正则 ?:表示此正则可以出现0或1次
    • 正则 + :表示此正则可以出现1或多次
    • 正则 * :表示此正则可以出现0、1或多次
    • 正则 {n}:表示此正则出现N次
    • 正则{n,}:表示此正则出现N+次
    • 正则{n,m}: 表示此正则出现n~m次
  • 逻辑运算

    • 正则1 正则2:正则1判断以后继续完成判断正则2
    • 正则1|正则2:正则1或正则2 有一组满足即可
    • (正则集):将多个正则作为一组,可以设置这一组单独设置出现的次数

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)
    • 全部拆分
  • public String [] split(String regex , int limit)
    • 部分拆分

实例

  • 字符串替换

    public class TestDemo { public static void main(String [] args) { String str = "Mirror is niubi" ; String regex = "[^a-z]" ; // 正则 System.out.println(str.replaceAll(regex,"")); } }

将不是小写的字母用空字符代替

  • 分隔字符

    public class TestDemo { public static void main(String [] args) { String str = "Mirror12342is1231niu123123bi" ; String regex = "\d+" ; // 正则 1个以上的数字 String result [] = str.split(regex); // 数组 for (int x = 0; x < result.length; x++) { System.out.println(result[x]); } } }

按照数字为条件分隔字符,并被分隔的字符串存入数组中

  • 验证字符串是否是数字,如果是变为double型

    public class TestDemo { public static void main(String [] args) { String str = "10.1" ; String regex = "\d+(\.\d+)?" ; // 正则 小数 System.out.println(str.matches(regex)); if (str.matches(regex)) { System.out.println(Double.parseDouble(str)); // 将str转换为double输出 } } }

  • 判断str是否是IPv4地址

    public class TestDemo { public static void main(String [] args) { String str = "192.168.1.1" ; String regex = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" ; String regexs = (\d{1,3}\.){3}\d{1,3}; //正则简化 System.out.println(str.matches(regex)); if (str.matches(regex)) { System.out.println(str); } } }

  • 判断是否为日期格式,如果是转为Date型数据

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;

    public class TestDemo { public static void main(String [] args) throws ParseException { String str = "2009-01-01" ; String regex = "\d{4}-\d{2}-\d{2}" ; System.out.println(str.matches(regex)); if (str.matches(regex)) { Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str); System.out.println(date); } } }

  • 判断电话号码:(如下是合法的电话号码格式)

    12345678

    010-12345678

    (010)-12345678

    public class TestDemo { public static void main(String [] args) throws ParseException { String str = "(010)-12345678" ; // String regex = "(\d{7,8})|(\d{3,4}-\d{7,8})|(\(\d{3,4}\)-\d{7,8})" ; String regex = "((\d{3,4}-)|(\(\d{3,4}\)-)?\d{7,8})"; System.out.println(str.matches(regex)); } }

最原始的 第4行 正则是繁琐的,而第5行 正则则是简单的,由于电话号码的前缀是特殊的三种状态:无前缀、有前缀、带括号的前缀;所以我们运用括号来将后两种的前缀状态进行判断,设置了"?" 符号表示正则只使用一次正则。

  • E-mail地址验证*

    地址由字母、数字、下划线组成

    hello@word.com(模拟的虚假mail)

    用户名要求由字母、数字、下划线、数字点组成,其中必须以字母开头、字母数字做结尾。用户名长度不超过30;而根域名只可以是指定的根域名

    public class TestDemo { public static void main(String [] args) throws ParseException { String str = "hello@word.com" ; String regex = "[a-zA-Z]?[a-zA-Z0-9_\.]{0,28}[0-9a-zA-Z]\@?\w+\.?(com|net|cn|gov|edu|org)"; System.out.println(str.matches(regex)); } }

java.util.regex 包

Pattern

public class TestDemo {
    public static void main(String [] args) throws ParseException {
        String str = "hello@word.com" ;
        String regex = "\\d+";
        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);// 编译正则
        String result [] = pattern.split(str); // 拆分字符串
        System.out.println(Arrays.toString(result)); //输出结果
        
    }

Matcher

public class TestDemo {
    public static void main(String [] args) throws ParseException {
        String str = "1234567" ;
        String regex = "\\d+";
        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);// 编译正则
        Matcher mat = pattern.matcher(str); // 进行正则匹配
        System.out.println(mat.matches()); // 匹配结果
    }
}
点赞
收藏
评论区
推荐文章
半臻 半臻
3年前
Python基础11——正则表达式
19正则表达式19.1正则基础正则表达式:字符串处理工具应用场景1.html查询2.验证字符串是否符合规则re模块match方法python通过正则表达式对字符串进行匹配importre使用match方法进行匹配操作re.match()从字符串的开始位置进行匹配,匹配成功,返回match对象。匹配失败,返回Noneresre
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java采坑之路
判断相等字符串判断相等        String str1  null;        String str2  "java金融";       // str1.equals(str2);  错误的写法        str2.equals(str1); // 常量写前面        Objects.equ
Wesley13 Wesley13
3年前
java判断字符串是否为数字或中文或字母
1.判断字符串是否仅为数字:1用JAVA自带的函数public static boolean isNumeric(String str){  for (int i  str.length();i0;){      if (!Character.isDigit(str.charAt(i))){
Andy20 Andy20
3年前
Golang中常用的字符串操作
Golang中常用的字符串操作一、标准库相关的Packagegoimport("strings")二、常用字符串操作1.判断是否为空字符串1.1使用“”进行判断思路:直接判断是否等于""空字符串,由于Golang中字符串不能为nil,且为值类型,所以直接与空字符串比较即可。举例:go
Wesley13 Wesley13
3年前
oracle sql 逗号 分割 REGEXP_SUBSTR 函数
1.REGEXP\_SUBSTR函数.这个函数的作用是正则分隔字符串,用法为functionREGEXP\_SUBSTR(string,pattern,position,occurrence,modifier)参数说明:参数1:string待分割字符串;参数2:pattern正则表达式;参数3:position起
Stella981 Stella981
3年前
Python3正则表达式
在Python中使用正则表达式Python语言通过标准库中的re模块(importre)支持正则表达式。使用match方法匹配字符串匹配字符串也就是设定一个文本模式,然后判断另外一个字符串是否符合这个文本模式。importre
Wesley13 Wesley13
3年前
ES6 新增了哪些字符串处理方法
ES6新增了哪些字符串处理方法我们都知道在ES6之前,我们只能使用indexOf来判断字符串是否存在某个字符,现在ES6多出了几个比较常用的方法:includes():返回布尔值,判断是否找到参数字符串。startsWith():返回布尔值,判断参数字符串是否在原字符
Wesley13 Wesley13
3年前
ES6基础之——判断字符串里是否包含其他字符串
在ES6里面添加了一些字符串的方法:includes()、startsWith()、endsWith(),他们可以很方便的判断字符串里是否包含其他字符串;includes():是否包含了参数字符串,返回布尔值startsWith():参数字符串是否在原字符串的头部,返回布尔值endsWith():参数字符串是否在原字符串的尾部,返回布尔值例子
京东云开发者 京东云开发者
7个月前
看不懂正则表达式?试试可视化工具吧!
1.前言是一种用来匹配字符串的强有力工具。设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串我们就认为它“匹配”了,否则该字符串就是不合法的。日常开发中常常会使用正则表达式,例如:对数据格式进行校验(判断一个字符串是否是合法的Emai