小笔记:Java正则表达式

正则表达式语法

1\ 单个字符

字符类解释
[ C1 C2 … ]表示任何 一个 可以从C1 C2 …中取值的字符
[^ … ]该字符集的补集
[ … && … ]两个字符集的交集
预定义字符类解释
.可以代表除了终止符之外的任意字符(DOTALL标志设置后,可代表所有字符)
\d代表一个数字 [0-9]
\D小写 \d 的补集,代表一个非数字 [^0-9]
\s一个空白字符 [\t\n\r\f]
\S小写 \s 的补集,一个非空白字符
\w一个词语字符 [a-zA-Z0-9_]
\W小写 \w 的补集,一个非词语字符
边界匹配符解释
^The beginning of a line
$The end of a line
\b一个 word 的边界
\B\b的补集
\AThe beginning of the input
\zThe end of the input(不能有结尾终止符\n,\r,\r\n,就是单纯的 input end)
\ZThe end of the input (但是结尾终止符可有可无)
G前一个匹配的结尾

具体参考博文:
正则表达式边界符中的 ^, $, \A, \Z, \z: link
【Java正则表达式系列】8 Boundary Matcher(边界匹配): link

2\ 量词

量词解释
X?0 或 1个
X*0 或 多个
X+1 或 多个
X{n} X{n,} X{n, m}重复n次,至少n次, 重复n到m之间次
量词后缀解释
?勉强匹配(懒惰匹配)(Reluctant)
+占有匹配 (Possessive)
默认贪婪匹配

三种策略 理解来说就是:
Greedy - 匹配pattern所能成功匹配最长串
Reluctant - 匹配pattern所能成功匹配最短串
Possessive - 尽可能多的去匹配,量词部分一旦匹配成功,就不再改变,可能会造成后面group的匹配失败

具体参考博文:
Java 正则表达式——贪婪匹配、惰性匹配、支配匹配 link
正则表达式的三种模式 link

3\ 群组

群组解释
(X)群组匹配

具体参考博文:
Java 正则表达式 link
java正则表达式中Group的理解 link
JAVA正则表达式-捕获组与非捕获组 link

Pattern & Matcher

1\ Pattern API

static Pattern compile(String regex)
static Pattern compile(String regex, int flags)
Matcher matcher(String inputStr)

简单了解compile的标志:

flag解释
Pattern.CASE_INSENSITIVE匹配时忽略大小写
Pattern.UNICODE_CASE
Pattern.DOTALL“.” 匹配包括行终止符的所有字符 single-line mode
Pattern.MULTILINE^和$匹配行的结尾 multi-line mode
Pattern.UNIX_LINES
Pattern.CANON_EQ

2\ Matcher API

//三种不同类型的匹配操作
public boolean lookingAt()

public boolean find() 
public boolean find(int startIndex)

public boolean matches()

----------------------------------------
//分组 匹配
public int start()
public int start(int groupId)

public int end()
public int end(int groupId)

String group() 
String group(int groupId)   
int groupCount() 
----------------------------------------
//替换
public String replaceAll(String replacement)
public String replaceFirst(String replacement)

----------------------------------------
//重置
Matcher reset() 
Matcher reset(CharSequence input) 

三种匹配操作 理解来说就是:
matches 匹配整个目标字符串
lookingAt 部分匹配,总是从第一个字符开始进行匹配
(类似于String类的 startsWith 方法
find 部分匹配,找到一个匹配的子串,将后移下次匹配的位置

具体参考博文:
java matcher 中find,matches,lookingAt三个方法的区别 link
JAVA正则表达式(matches 和 lookingAt 方法) link

3\ 简单的例子

最后举一个正则表达式的使用例子:参考W3Cschool的java教程

下面是一个对单词"cat"
出现在输入字符串中 出现次数 进行计数的例子:
----------------------------------------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT = "cat cat cat cattie cat";                              

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       //简化: Matcher m = Pattern.compile(REGEX).matcher(INPUT);
       
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}
-----------------------------------
//以上实例编译运行结果如下:
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值