1.字符串后加:
/s+ 可以匹配多个空格
/d+ 匹配一个或多个数字
/. 匹配"."
\b 匹配字边界,即字符串与空格之间的位置
\B 匹配非字边界
2.字符串定义:
^ 定义字符串以什么开始
()?设置括号内的选项是可选的
$ 定义字符串以什么结束
* 零次或多次匹配前面的字符或子表达式 {0,}
+ 一次或多次匹配前面的字符或子表达式 {1,}
{n} n非负整数,正好匹配n次
{n,} n非负整数,至少匹配n次
{n,m} n非负整数,至少匹配n次,最多匹配m次
x|y 匹配x或y
[xyz] 匹配包含的任一字符
[^xyz] 匹配未包含的任何字符
[a-z] 匹配a到z范围内的任何字符
[^a-z] 匹配不在指定范围内的任何字符
\d 数字字符匹配,等效于[0-9]
\D 非数字字符匹配
\f 换页符匹配,等效于\x0d和\cL
\n 换行符匹配,等效于\x0a和\cJ
\r 回车符匹配,等效于\x0a和\cM
\s 匹配任何空白字符,等效[\f\n\r\t\v]
\S 匹配任何非空白字符
\t 制表符匹配,等效于\x09和\cl
\v 垂直制表符匹配,与\x0b和\cK
\w 匹配任何字类字符,包括下划线,[A-Za-z0-9_]
\W 与任何非单词字符匹配
3.字符串穿插:
.*子字符串.* 查找是否包含了子字符串
4.特殊含义:
\\ 插入一个正则表达式的反斜线,其后字符具有特殊的意义
\ 将下一字符标记为特殊字符
? 当紧随任何其他限定符,标识非贪心的,o+匹配所有o,o+?匹配单个o
. 匹配除"/r/n"之外的任何单个字符
常用案例:
"^\\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\\d+$" //整数
"^\\d+(" //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
"^((-\\d+(" //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?\\d+)(" //浮点数
正则匹配主要包括三个类:
1.Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
2.Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
例:
1.
String pattern = ".*runoob.*";
boolean isMatch = Pattern.matches(pattern, content);
2.
String pattern = "(\\D*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
m.group(0) ---获取整个表达式
m.group(1) ---获取第一个组表达式(共三组)
m.start() ---匹配的初始索引
m.end() ---匹配的结束索引
m.lookingAt() ---要求整个序列都匹配
m.matches() ---不要求整个序列匹配,但需要从第一个字符匹配
m.replaceFrist() ---替换首次匹配
m.replaceAll() ---替换所有匹配
捕获组:(规则:把多个字符当一个单独单元来进行处理,通过父括号类的字符分组来创建捕获组通过从左至右计算其开括号来编号)