快速开始一个Java正则表达式

构建一个正则表达式

//要处理的字符串
String content = "htsbhdfgsfhsgjs";
//构建一个正则表达式
Pattern pattern = Pattern.compile("h.*?s");
//使用正则表达式匹配字符串
Matcher matcher = pattern.matcher(content);

//在字符串中匹配下一个符合表达式的字符串,非贪婪模式
matcher.find();
//整个字符串匹配正则表达式
matcher.matches();
//从字符串的第一个字符匹配
matcher.lookingAt();

find, matches,lookingAt三个方法的区别

find方法

while (matcher.find()){
    System.out.println(matcher.start()+" - "+matcher.group() +" - "+ matcher.end());
}

0 - hts - 3
4 - hdfgs - 9
10 - hs - 12

matches方法

if (matcher.matches()) {
    System.out.println(matcher.start()+" - "+matcher.group() +" - "+ matcher.end());
}

0 - htsbhdfgsfhsgjs - 15

lookingAt方法

if (matcher.lookingAt()) {
    System.out.println(matcher.start()+" - "+matcher.group() +" - "+ matcher.end());
}
0 - hts - 3

匹配分组

//Pattern pattern = Pattern.compile("(h.*?s)(h.*?s)");

//正则表达式(h.*?s)(h.*?s)作为一个整体,匹配不到

Pattern pattern = Pattern.compile("(h.*?s)(.*?)(h.*?s)");

while (matcher.find()){
    System.out.println(matcher.start(0)+" - "+matcher.group(0) +" - "+ matcher.end(0));
    System.out.println(matcher.start(1)+" - "+matcher.group(1) +" - "+ matcher.end(1));
    System.out.println(matcher.start(2)+" - "+matcher.group(2) +" - "+ matcher.end(2));
    System.out.println(matcher.start(3)+" - "+matcher.group(3) +" - "+ matcher.end(3));
}

0 - htsbhdfgs - 9
0 - hts - 3
3 - b - 4
4 - hdfgs - 9
  • group 获取的是 (h.?s)(.?)(h.*?s) 匹配的上的内容
  • group(1) 获取的是第一个括号中的内容
  • group(2) 获取的是第二个括号中的内容
  • start() 获取匹配到的字符串起始下标
  • end() 获取匹配到的字符串结束下标的后面的字符地址
  • start(index) 和 end(index) 表示第几个分组的

这里理解正则表达式要从整体来看,匹配到的是(h.?s)(.?)(h.*?s)这种格式的字符串,在匹配到的字符串中我们可以通过下标获取我们用括号括起来的部分

替换

 public static void main(String[] args) {
        String content =  "this is T100T,that is T200T";
        String pattern = "T.*?T";

        Pattern r = Pattern.compile(pattern);
        Matcher matcher = r.matcher(content);

        String replaceFirst = matcher.replaceFirst("TT");
        String replaceAllResult = matcher.replaceAll("TT");

        System.out.println(replaceFirst);
        System.out.println(replaceAllResult);

    }

运行结果:
this is TT,that is T200T
this is TT,that is TT

常用匹配规则

字符串="hello,heihei,im here"

\ 转义字符,java正则表达式中\\才能代表个\,\\匹配的的\,\\\\匹配的是\\

^    匹配输入字符串开始位置    ^he 匹配,^llo不匹配

$    匹配输入字符串结尾位置    here$匹配 ,im$不匹配
    
+    1次或多次    (hei)+表示匹配 hei,heihei,heiheihei格式,hei+代表匹配 hei,heii,heiii格式,默认是贪婪匹配

.    匹配除了 \r和\n之外的任意字符

*    0次或者多次

?    代表非贪心模式

{3}    匹配多沙次,h{3}匹配 hhh

{3,5}    匹配3-5次,h{3,5}匹配 hhh,hhhh,hhhhh都能匹配的到

\d    匹配数字 [0-9]等价


\s    匹配任何空白字符
\S    匹配任何非空白字符

\n    换行
\r    回车
\f    换页符
\t    制表符


[abc]    匹配a或者b或c都可
[a-z]    "a"到"z"范围内的任何小写字母。
[^a-z]    不在"a"到"z"范围内的任何小写字母。

\w    匹配任何字符类  [a-zA-Z0-9]等价

.*?   
posted @ 2020-06-15 17:22  用飘柔不秃头  阅读(215)  评论(0)    收藏  举报
这是一个测试连接