JAVA 正则表达式
public static void main( String args[] ){ String REGEX = "\\bcat\\b"; String INPUT = "cat cat cat cattie cat"; Pattern p = Pattern.compile(REGEX); Matcher m = p.matcher(INPUT); // 获取 matcher 对象 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()); System.out.println("end(): "+ m.group()); } }
正则表达式
. 匹配除"\r\n"之外的任何单个字符
^ 开始
$ 结束
* 次或多次
+ 一次或多次
? 零次或一次
{n} 正好 n 次
{n,} 至少匹配 n 次
{n,m} n次(含)到m次(含)
x|y 匹配 x 或 y
[xyz] 字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。
[^xyz] 反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。
[a-z]字符范围
[^a-z]反向范围字符
\d 数字字符匹配。等效于 [0-9]。
\D 非数字字符匹配。等效于 [^0-9]。
\f 换页符匹配。等效于 \x0c 和 \cL。
\n 换行符匹配。等效于 \x0a 和 \cJ。
\r 匹配一个回车符。等效于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。
\t 制表符匹配。与 \x09 和 \cI 等效。
\v 垂直制表符匹配。与 \x0b 和 \cK 等效。
\w 匹配任何字类字符:字母、数字和下划线。与"[A-Za-z0-9_]"等效。
\W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效
(pattern) 匹配 pattern 并捕获该匹配的子表达式
String类
boolean matches(regex)
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
split(String regex)
Pattern类
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
或者Pattern.matches("a*b", "aaaaab")
对于多次使用的,推荐用Pattern p = Pattern.compile("a*b");,效率高些。
注意:Matcher不是线程安全的。
Matcher类
Matcher.matches() 需要全部匹配
Matcher.lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。
注意:1.从第一个字符开始匹配
2.部分匹配即可。
Matcher.find() 部分匹配,匹配到的字符串可以在任何位置
Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串