java和javascript的正则表达式知识点汇总

java的正则表达式

1. 字符类

(1). []

含义:里面的内容出现一次
举例:[0-9] [a-zA-Z0-9]
作用:匹配单个字符是否是数字,匹配单个字符是否是数字或者大小写字母

(2). ()

含义:分组,将相应部分抽离出主体,做单独处理
举例:a(bc)+
作用:匹配a开头,bc结尾的字符串,其中bc可能会出现多次,例如abc,abcbc,abcbcbcbcbcbc

(3). ^

含义:非,取反
举例:[^0-9] [^abc]
作用:匹配非数字,效果等同于\D,非a、b、c字符之外的其他字符

(4). &&

含义:交集
举例:[a-e&&[d-f]]
作用:匹配d或者e,即a-e和d-f二者之间的交集

(5). |

含义:并集、或(写在中括号外面)
举例:x|X
作用:在中括号外面表示或者,取并集。匹配小写的x或者大写的X

(6). 其他特殊字符含义

. 任意字符(\n回车符号不匹配)
\ 转义字符(对一些具有特殊的字符做转义)
\d 匹配数字(即[0-9])
\D 匹配非数字(即[^0-9])
\s 空白字符(即[\t\n\xOB\f\r])
\S 非空白字符([^\s])
\w 单词字符(即[a-zA-Z0-9_])
\W 非单词字符(即[^\w])

2. 出现数量类

(1). ?

含义:出现0或者1次
举例[0-9]?
作用:匹配空字符串或者0-9的数字

(2). *

含义:出现0或者多次
举例[0-9]*
作用:匹配空字符串或者数字

(3). +

含义:出现1或者多次
举例[0-9]+
作用:匹配数字,数字长度至少一位

(4). {n}

含义:出现n次,位数必须恰好等于n
举例[0-9]{5}
作用:匹配5位的数字,数字长度必须为5位

(5). {n, }

含义:至少出现n次,位数必须大于等于n
举例[0-9]{5}
作用:匹配大于5位的数字,数字长度必须为大于5位

(5). {n, m}

含义:至少出现n次,但是少于m次,位数必须大于等于n,小于等于m
举例[0-9]{5, 9}
作用:匹配大于5位的数字,数字长度必须为大于等于5位,但是小于等于9位

(6). (?i)

含义:忽略符号后面的大小写进行匹配
举例:(?i)abc , a(?i)bc
作用:匹配abc,其中三个字母的大小写全都忽略。匹配a开头的bc结尾的,其中bc的大小写全都可以忽略。

3. 零宽断言

(1). ?=

含义:正向先行断言
举例:pattern1(?=pattern2)
作用:代表字符串中的一个位置能够匹配pattern1,紧接该位置之后的字符序列能够匹配pattern2,匹配返回的结果只打印pattern1

(2). ?!

含义:负向先行断言
举例:pattern1(?!pattern2)
作用:代表字符串中的一个位置能够匹配pattern1,紧接该位置之后的字符序列绝对不能够匹配pattern2,匹配返回的结果只打印pattern1

(3). ?<=

含义:正向后行断言
举例:(?<=pattern2)pattern1
作用:代表字符串中的一个位置能够匹配pattern1,紧接该位置之前的字符序列能够匹配pattern2,匹配返回的结果只打印pattern1

(3). ?<!

含义:负向后行断言
举例:(?<!pattern2)pattern1
作用:代表字符串中的一个位置能够匹配pattern1,紧接该位置之前的字符序列绝对不能够匹配pattern2,匹配返回的结果只打印pattern1

4. 贪婪匹配与非贪婪匹配

1. 贪婪匹配

含义:匹配字符越多越好,默认
举例: (ab)+,(ab)*
作用:尽可能多的匹配ab字符串出现的

2. 非贪婪匹配

含义: 匹配字符越少越好
举例: (ab)+?, (ab)*?

5. 捕获分组与非捕获分组

1. 捕获分组

含义:可以获取到分组内容并进行使用
举例:(ab)\w*\1
作用:匹配以ab开头,ab结尾的字符串
特点:分组以\加上数字表示复用的第几组分组数据,分组从1开始,不间断,以左括号为基准,最左边的是第一组
其他:在正则表达式内部用\n表示,在外部以$n表示第n个分组。

2. 非捕获分组

含义:分组之后该组数据不需要使用,仅仅把数据括起来,不占组号。
举例:(?:) (?=) (?!) (?<=) (?<!)

常用的java正则表达式汇总

1. 手机号匹配

部分测试代码

    @Test
    public void test3() {
//        testRegex("abcb", "a(bc)+");
//        testRegex("ef", "[a-e&&[d-f]]*");
//        testRegex("9", "[0-9]*");
//        testRegex("", "[0-9]*");
//        testRegex("", "[0-9]+");
//        testRegex("5676575", "[0-9]*");
//        testRegex("5676575", "[0-9]+");
//        testRegex("5", "[0-9]+");
//        testRegex("50000000", "[0-9]{5,9}");
//        testRegex("b", "[(?i)aBc]");
        String regex = "(?<!(\\d))java";
        String text = "123 java8 java9javaq";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
//        testRegex("java8", "java(?=\\d)");
    }
    public void testRegex(String str, String regex) {
        System.out.println(str.matches(regex));
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容