正则表达式
正则表达式:正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。
规则字符:正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的规则字符。(其在java.util.regex Pattern类中)
常见语法:
1:字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
2:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
3:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
(在正则表达式里面组成单词的东西必须有这些东西组成)
4:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
即不是单词字符的地方。
举例:hello world?haha;xixi
5:Greedy 数量词
X? X, 一次或一次也没有 比如""空串 就是没有
X* X, 零次或多次 大于等于1次 都算多次
X+ X, 一次或多次
X{n} X, 恰好 n 次
X{n,} X, 至少 n 次
X{n,m} X, 至少 n 次,但是不超过 m 次
例:
public static void main(String[] args) {
String regx="[0-9]+"; //可以出现一个或者多个
regx="[a-z]?"; //出现一次,或一次也不要出现 "" 空串就是没有出现
regx="[A-Z0-9]*"; //零次或多次 一次也算多次
regx="[a-z]{3}"; // 恰好几次
regx="[0-9]{3,}"; // 至少几次
regx="[a-z0-9A-Z]{6,12}"; //等于等于 6 小于等12
String regex = "[1-9][0-9]{4,14}";
boolean b = "12300abc".matches(regx);
System.out.println(b);
}
判断功能:
String类的功能:public boolean matches(String regex)
分割功能:
String类的功能:public String[] split(String regex)
替换功能:
String类的功能:public String replaceAll(String regex,String replacement)
Pattern类、Matcher类:
//调用顺序
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
//先使用find()方法先找到 ,才能用group()方法获取出来
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");
}
}
}