正则表达式主要的三个类
- Pattern 正则表达式的编译表示
- Matcher 对输入字符串进行解释和匹配操作
- PatternSyntaxException 非强制异常类,标示语法错误
ex: Matcher m = Pattern.compile(pattern).matcher(sourceStr);
ex:dog ((A)(B)(c)),可通过m.groupCount()查看匹配到的个数,group(0)默认为sourceStr,不包含在groupCont中
语法
\\ : 插入一个正则表达式的反斜线,其后的字符才显得有意义. \\d \\D etc.
\\\\ : 普通的反斜杠
\ : 将下一字符标记为特殊字符,文本,反向引用,八进制字符串
^ : 匹配字符串的开头
$ : 匹配字符串的结尾
* : 匹配0或多次前面的字符或子表达式
+ : 匹配一次或多次前面的字符或表达式
? : 匹配0或1次前面的字符或表达式 | 当此字符跟随在其他限定符后,表示非贪心模式(匹配搜索到的尽可能短的字符串)
{n} : n>0,正好匹配n次前面的字符或表达式 o{2} bob:false, food:true
{n,} : 至少匹配n次
{n,m} : 至少n次,至多m次
. : 匹配除\r\n外的任意单个字符
(pattern) : 匹配pattern并捕获该匹配的子表达式,可以使用$0-$9来检索捕获的匹配
(?:pattern) : 匹配但不捕获该匹配的表达式 eg:industr(?:y|lies)是比'industry|industries'更经济
x|y : 匹配x或y
[xyz] : 匹配包含的任1字符
[^xyz] : 匹配不包含此的任意字符
[a-z] : 字符范围。匹配指定范围内的任何字符
[^a-z] : 字符范围。匹配不在指定范围内的任何字符
\b : 匹配一个字边界,即字与空格间的位置 "er\b"匹配never而不匹配verb
\B : 与\b相反
\cx : 匹配x指示的控制字符 \cM匹配Control-M或回车符
\d : 匹配数字字符
\D : 匹配非数字字符
\f : 匹配换页符
\n : 匹配换行符
\r : 匹配回车符
\s : 匹配任何空白字符
\S : 匹配任何非空白字符
\t : 匹配制表符
\v : 匹配垂直制表符
\w : 匹配任何字符类
\W : 匹配任何非单词字符
\xn : 匹配n, 此处n是一个16进制的转义码
note:Java源代码中的反斜线被解释为字符转义,表示正则表达式受到保护 "\b"表示退格符, "\b"与字符边界匹配
Matcher类的方法
索引
- start() 返回以前匹配的初始索引
- end() 返回最后匹配字符之后的偏移量
matches和lookingAt
- matches 要求匹配整个序列
- lookingAt 不需要整句匹配,但需要从第一个字符匹配
replaceFirst和replaceAll
- 替换匹配正则表达式的文本
测试说明
String str1 = "a,b,c,d";
String str3 = "lm/m2m/7504552/ep/_asemrwpjfajfa======";
String str4 = "http://127.0.0.1:3000";
Matcher m = Pattern.compile("^(.)\\S+(.)\\S+(.)\\S+(.)").matcher(str1);
Log.d(TAG, "runTestOnRegExp: str1 groupCount " + m.groupCount());
if (m.find()) {
Log.d(TAG, "runTestOnRegExp: str1 group(1) " + m.group(1));
Log.d(TAG, "runTestOnRegExp: str1 group(2) " + m.group(2));
Log.d(TAG, "runTestOnRegExp: str1 group(3) " + m.group(3));
Log.d(TAG, "runTestOnRegExp: str1 group(4) " + m.group(4));
}
// str3
m = Pattern.compile(".*/(.*)$").matcher(str3);
if (m.find()) {
Log.d(TAG, "runTestOnRegExp: str3 group(1) " + m.group(1));
}
// str4
m = Pattern.compile("^.*://(.*):(\\d*)").matcher(str4);
if (m.find()) {
Log.d(TAG, "runTestOnRegExp: str4 group(1) " + m.group(1));
Log.d(TAG, "runTestOnRegExp: str4 group(2) " + m.group(2));
}
Result:
runTestOnRegExp: str1 groupCount 4
runTestOnRegExp: str1 group(1) a
D/MainActivity: runTestOnRegExp: str1 group(2) b
runTestOnRegExp: str1 group(3) c
runTestOnRegExp: str1 group(4) d
runTestOnRegExp: str3 group(1) _asemrwpjfajfa======
runTestOnRegExp: str4 group(1) 127.0.0.1
runTestOnRegExp: str4 group(2) 3000