正则表达式的知识点梳理
this is text 匹配this is text
this\s+is\s+text\s+ 匹配this后边任意多个空格+is + 任意多个空格+text+任意多个空格
^\d+(\.\d+)? ^ 表示以数字开头
\d+ 表示有一个多个数字
\.表示一个点
?表示他中的字符是可用选择的
可以匹配的字符2 4 22.3
Pattern
pattern对象是一个正则表达式的编译器,
Matcher
对象是对输入字符串进行解释匹配
import java.util.regex.*; class RegexExample1{ public static void main(String args[]){ String content = "I am noob " + "from runoob.com."; String pattern = ".*runoob.*"; boolean isMatch = Pattern.matches(pattern, content); System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch); } }
捕获组
捕获组是把多个字符当作一个单独的单元进行处理的方法,例如表达式((A)(B)(c))有如下四个分组
((A)(b) (c))
(a)
((b)(c))
(b)
(c)
捕获组是通过从左向右计算其开括号来编号 group(0) 表示整个表达式
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // 按指定模式在字符串查找 String line = "This order was placed for QT3000! OK?"; String pattern = "(\\D*)(\\d+)(.*)"; // 创建 Pattern 对象 Pattern r = Pattern.compile(pattern); // 现在创建 matcher 对象 Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Found value: " + m.group(0) ); System.out.println("Found value: " + m.group(1) ); System.out.println("Found value: " + m.group(2) ); System.out.println("Found value: " + m.group(3) ); } else { System.out.println("NO MATCH"); } } }
所谓的捕获组 就是把括号里边匹配的值都打印出来
其他语言中\\表示反斜杠,没有特殊含义 。\代表特殊含义 https://www.cnblogs.com/chenkeyu/p/7574924.html
在java 语言中\\表示转意符号,\\\\表示 单独的\.在java 语言中\\代表一个\
几种特殊字符的说明
^ 匹配字符串开始的位置,如果设置了Multiline 属性,^还会与\n或者\r之后的位置匹配
$ 匹配字符串的结束的位置,如果设置了Multiline属性,$还会与\n\r之前的属性匹配
* 0次或多次
+ 代表IC饿货多次
()?代表存在不存在
?的特殊使用,当?出现在? + *{n,},{n,m}的时候表示他是非贪心的。他的含义是尽可能短的匹配字符串。而默认的匹配模式是贪心的匹配模式,是尽可能长的匹配我们要使用的对象。
soooooo so+匹配的是sooooo so+匹配的是so
(pattern) 括号中可以存放存放的是子正则表达式。可以使用$0 $9 从结果匹配集合中检索获捕匹配,若要匹配括号内的字符() 请使用\(\)
(?pattern) 匹配patern ,但是不不住该匹配的子表达式,也就是他是个非捕获的匹配。不存储供以后使用的匹配,这对于or(|) 组合模式部件的情况很有用,
(?=pattern)
(?!pattern)
x|y 匹配x和y
[abc]匹配abc中任意字符串
[^abc]匹配不包含abc的字符
\d代表数字
\D代表非数字
\s代表空格
\S代表非空格
Matcher 类的方法
\\b代表单词的边界
\\B代表非单纯边界
matches 和lookingAt方法,matches 和lookingAt 方法都用来尝试匹配一个输入序列模式,