首页 > 基础资料 博客日记

Java 正则表达式

2025-01-16 07:30:09基础资料围观99

本篇文章分享Java 正则表达式,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识

目录

Java 正则表达式

1、结构组成

元字符

量词

位置符号

分组

字符类

贪婪模式和非贪婪模式

零宽正向断言和负向断言

2、正则案例使用

Java正则表达式去除字符串中的中文

Java中的正则校验

分组/替换

排除字符


Java 正则表达式

1、结构组成

元字符

用于构建正则表达式的符号,常用的有

符号描述
.查找任意的单个字符,除换行符外
\w任意一个字母或数字或下划线,A_Za_Z09,中任意一个
\W查找非单词的字符,等价于[^A_Za_z09
\d匹配一个数字字符,等价于[0-9]
\D匹配一个非数字字符,等价于[^0-9]
\s匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v]
\S匹配任何非空白字符,等价于[^\f\n\r\t\v]
\b匹配一个单词边界,也就是指单词和空格间的位置,比如’er\b’可以匹配”never”中的”er”,但是不能匹配”verb”中的”er”
\B匹配非单词边界,’er\B’能匹配’verb’中的’er’,但不能匹配’never’中的’er’
\0匹配非单词边界,’er\查找NUL字符。
\n匹配一个换行符
\f匹配一个换页符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
\xxx查找一个以八进制数xxx规定的字符
\xdd查找以16进制数dd规定的字符
\uxxxx查找以16进制数的xxxx规定的Unicode字符。

\num

这里的num指number,也就是数字,当\后面跟数字,表示匹配第几个括号中的结果

其实常用的几个可以简单记为下面的几个意思:
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符例子:是否有不是数字的字符

ab(c)d\1:等同于 abcdc 。

量词

用于限定子模式出现在正则表达式的次数。

符号描述
+匹配一次或多次,相当于{1,}
*匹配零次或多次 ,相当于{0,}
?匹配零次或一次 ,相当于{0,1}
{n}匹配n次
{n,m}匹配至少n个,最多m个某某的字符串
{n,}匹配至少n个某字符串

位置符号

符号描述
$结束符号,例子:n$,匹配以n结尾的字符串
^起始符号,例如^n,匹配以n开头的字符串
?=肯定正向环视,例:?=n,匹配其后紧接指定的n字符串
?!否定正向环视,例如:?!n,匹配其后没有紧接指定的n字符串
?:表示不匹配

注意点: 
  刚开始学习正则的时候,是比较容易混淆 ^ : 放在正则的最开始位置,就代表起始的意思,放在中括号里,表示排除的意思。也就是说,/[^a]/和/^[a]/是不一样的,前者是排除的意思,后者是代表首位
  $:正则的最后位置,就代表结束的意思.

分组

符号描述
 |选择(不是他就是她)  | (竖线) 则表示或的关系,表示检测的字符串须满足其中一个时,才符合条件。
(…)分组

字符类

符号描述
[ ][ ] 表示匹配其中任意一个字符。
[值1-值2][值1-值2] 则表示值1到值2中间的所有字符都满足(包括值1和值2)。常用该正则来表示大小写字母范围,数字范围。
[0-9]匹配 0 到 9 间的字符
[a-zA-Z]匹配任意字母
[^ ][^ ] 表示不与中括号里的任意字符匹配。
[^0-9]不等于0到9的其它字符

  ()分组符号可以理解为,数学运算中的括号,用于计算的分组使用。[]可以理解为,只要满足括号里面其中的某种条件即可。比如[abc],意思是满足abc中的某一个,这样比较好记。

贪婪模式和非贪婪模式

  其实可以简单的理解,贪婪模式就是尽可能多的匹配,非贪婪模式就是尽可能少的匹配.
贪婪模式量词: {x,y} , {x,} , ? , * , 和 +
非贪婪模式量词: {x,y}?,{x,}?,??,*?,和 +?,所以非贪婪模式就是在贪婪模式后面加了一个问号

零宽正向断言和负向断言

  • (?=)零宽正向断言: 括号内表示某个位置右边必须和=右边匹配上
  • (?!)负向断言: 括号内表示某个位置右边不和!后的字符匹配。

    只能输入数字:^[0-9]*$。
  只能输入n位的数字:^\d{n}$。
  只能输入至少n位的数字:^d{n,}$。
  只能输入m~n位的数字:^d{m,n}$
  只能输入零和非零开头的数字:^(0|[1-9][0-9]*)$
  只能输入有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
  只能输入有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
  只能输入非零的正整数:^+?[1-9][0-9]*$
  只能输入非零的负整数:^-[1-9][]0-9*$
  只能输入长度为3的字符:^.{3}$
  只能输入由26个英文字母组成的字符串:^[A-Za-z]+$
  只能输入由26个大写英文字母组成的字符串:^[A-Z]+$
  只能输入由26个小写英文字母组成的字符串:^[a-z]+$
  只能输入由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  只能输入由数字、26个英文字母或者下划线组成的字符串:^w+$
  验证用户密码:^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
  验证是否含有^%&’,;=?$""等字符:[^%&’,;=?$"x22]+
  只能输入汉字:^["u4e00-"u9fa5]{0,}$
  验证Email地址:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
  验证InternetURL:^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
  验证电话号码:^((d{3,4}-)|d{3.4}-)?d{7,8}$正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
  验证身份证号(15位或18位数字):^d{15}|d{18}$
  验证一年的12个月:^(0?[1-9]|1[0-2])$正确格式为:"01"~"09"和"1"~"12"。
  验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$正确格式为;"01"~"09"和"1"~"31"。

2、正则案例使用

Java正则表达式去除字符串中的中文

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class T1Main {
    public static void main(String[] args) {
        String str = "123abc呵呵fuc";
        String reg = "[\u4e00-\u9fa5]";
        Pattern pattern = Pattern.compile(reg);
        Matcher matcher=pattern.matcher(str);
        String newStr = matcher.replaceAll("");
        System.out.println("去除中文后的字符串:" + newStr);
    }
}

Java中的正则校验

正则表达式主要用途就是校验字符串,那么在Java中,只需要通过下面这个方法即可进行校验。

boolean result = Pattern.matches(regex, input);
其中:
regex 是我们需要写的正则表达式校验规则;
input 是我们待校验的字符串;
返回的 result 就是我们校验的结果,当为 true 的时候,表示校验通过,当为 false 的时候,则表示校验不通过。

使用Pattern.quote(strTar) 方法可以实现忽略正则表达式特殊字符的替换

Java String 字符串常用操作

分组/替换

比如,想把yyyy-mm-dd格式,替换成mm/dd/yyyy怎么做?

    public static void main(String[] args) {
        String regex = "(\\d{4})-(\\d{2})-(\\d{2})";
        String dateStr = "2017-06-12";
        System.out.println(dateStr.replaceAll(regex,"$2/$3/$1"));
    }

排除字符

字符串中想匹配不包括“TWN”,"HKG","MAC"的字符串

    public static void main(String[] args) {
        String regex1 = "^(?!(HKG|MAC|TWN))[A-Z]{3}$";
        String input1 = "MAC";
        String input2 = "MAA";
        System.out.println(Pattern.matches(regex1,input1));//false
        System.out.println(Pattern.matches(regex1,input2));//true
    }

再小的努力,乘以365都很明显!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!


文章来源:https://blog.csdn.net/weixin_42472027/article/details/143644153
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云