正则表达式总结

本文总结了正则表达式的常用语法与应用技巧,包括基本匹配符号、特殊字符、贪婪与非贪婪匹配等,并通过实例演示如何进行字符串的匹配、分割、搜索与替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式小总结
对于正则表达式,大学的时候就学过不过因为没有仔细的好好听课,导致工作后很长一段时间还是不是很熟悉,所以特意抽出个时间来总结一下用法。

常规匹配方式:
String.matcher()方法,括号内放正则表达式 java中所有 \ 都需要 \ 双引号

\d:任意一个数字0-9
\s:任意一个空白字符,或换行符
\w:任意一个字符 0-9 a-z A-Z 或下划线 
tip:如果d,s,w为大写那么就是求反向 
例:\D即匹配一个非数字

. :表示匹配任意一个字符,仅限一个

如果匹配中文就用\u####表示
a\u548cc可以匹配a和c \u548c 为 ‘和’

\d* 可以匹配认识个字符,包括0字符,即0到任意个
\d+ 匹配1到任意个(至少一个)
\d? 可以匹配0或一个字符 例A? 可以匹配 空和A
\d{3} 可以匹配3个连着的数字 
\d{3,5}可以匹配3-5个连着的数字
\d{{3,}可以匹配3个以上数字
\d{0,3}最多匹配3个数字

[abc]:匹配方括号内任意一个字符
[a-zA-Z0-9]:匹配指定范围内字符
[^A-F]:指定范围以外字符
A\sB|A\sC|A\sD :匹配 A B或A C或A D
上面表达式提取后 A\s(B|C|D)

^匹配开头,美元符号匹配结尾
^在方括号内的话代表取反 [^0-9]表示匹配一个非数字
^A\d+B[美元符号]表示匹配A开头的B结尾的字符串,中间包含的是任意1到多个数字

分组匹配

分组的话即需要使用Pattern类
例子:

Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-12345678");
if (m.matches()) {
            String g1 = m.group(1);
            String g2 = m.group(2);
            System.out.println(g1);
            System.out.println(g2);
 }

得到两个匹配上的子串010和12345678。

贪婪匹配

一般默认是贪婪匹配,就是一个表达式尽可能多的匹配后面的字符串
“123000”:3个0
“10100”:2个0
“1001”:0个0
如(\d+)(0*)这个的话那么后面的(0*)就没用了,因为前面的\d+就已经把所有的字符串匹配完了,所以分组的时候就只会显示一个组。这个时候可以在\d+变为\d+?变为非贪婪,这样遇到0的时候发现后面的0可以匹配\d+就不会再往后匹配了。
tips:(\d??)(9
)前项表示匹配1个或0个数字后面表示非贪婪,如果是’9999‘的话,就可以分为两组 ”“和”9999“
前面就默认为只匹配0个字符。

分割字符串:String.split()
搜索子串:Matcher.find()
替换字符串:String.replaceAll()

分割字符串
String.split()方法传入的正是正则表达式。
“a, b ;; c”.split(“[\,\;\s]+”); // { “a”, “b”, “c” }
凡是遇到,;空格都是分割符

搜索字符串
例子:

String s = "the quick brown fox jumps over the lazy dog.";
        Pattern p = Pattern.compile("\\wo\\w");
        Matcher m = p.matcher(s);
        while (m.find()) {
            String sub = s.substring(m.start(), m.end());
            System.out.println(sub);
}

找出符合\w0\w的字符串那么只有
brown的row ,fox, dog
\w等于[A-Za-z0-9_] 注意最后一个是下划线

替换
例子:

 String s = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";
 String r = s.replaceAll("\\s+", " ");
 System.out.println(r); // "The quick brown fox jumps over the lazy dog."

用一个空格字符串替换调 \s+(这个是代表有一个或多个空格字符或者tab)

反向引用
例子:

String s = "the quick brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
System.out.println(r);

$1代表是被匹配到的字符串
the quick brown fox jumps over the lazy dog.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值