正则表达式
是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
正则表达式可谓是字符串处理神器,如果说我们需要用string方法去判断一个字符串符不符合我们的要求有时候会特别的麻烦,这时候就可以应用正则表达式去处理,这样问题就会简单很多。
举个例子
判断输入的电话号码是否合法?
1.必须是11位数字
2.必须是1开头
如果要用String方法去处理的话,是可以的但是代码写起来会很复杂,下面演示如何用正则表达式去处理
String rgex = "[1][0-9]{9}"
boolean b = phoneNumber.matches(rgex);
//如果格式正确,返回true
那么上面的正则表达式是什么意思呢?
下面列出的是一些正则表达式中的一些常用规则字符
符号 | 说明 |
---|---|
. | 匹配一个字符 |
* | 0 或者n个字符 |
+ | 1个及以上字符 |
? | 1个或者0个 |
^ | 位于[]中表示取反,位于[]外面表示一行的开头 |
$ | 一行的结尾 |
- | 范围 |
I | 或者 |
&& | 且 |
\d | 一个数字,同[0-9] |
\D | 非数字,同[^0-9] |
\s | 空白字符,[ \t\n\x0B\f\r] |
\S | 非空白符 |
\w | 大小写字母和下斜杠,同[a-zA-Z_0-9] |
\W | [^\w] |
\b | 一个单词的边界 |
{n} | 出现n次 |
{n,} | 至少出现n次 |
{n,m} | n到m次 |
[n-m] | n到m中的一个 |
[abc] | abc中的一个 |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
这样就一目了然了。
split方法截取字符串
在String类中提供的split方法可以方便我们截取字符串,方法中需要传入一个正则表达式。
public String[] split(String regex)
例如:
去除"90=77=88=88=88=99"中的‘=’
String str = "90=77=88=88=88=99";
String[] split = str.split("=");
该方法会返回一个字符串数组。我们遍历输出这个字符串 就可以得到想要的结果。
replaceAll方法替换字符串
在String类中提供的replaceAll方法可以方便我们替换字符串的指定内容,方法需要传入一个正则表达式。
public String replaceAll(String regex,String replacement)
例如:
将”密码:12345678“中的数字替换为‘*’。
String password = "密码:12345678";
String temp = password.replaceAll("[0-9]",'*');
Pattern和Matcher
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。
它包括两个类:Pattern和Matcher
Pattern 一个Pattern是一个正则表达式经编译后的表现模式。
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
find()和group()
find()对字符串进行匹配,匹配到的字符串可以在任何位置.
group()获取当前位置的字符串。
用法如下:
String str="da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
String regx="\\b[a-z]{3}\\b";//匹配由三个字母组成的单词
Pattern p = Pattern.compile(regx);
Matcher m = p.matcher(str);
while (m.find()){
String s = m.group();
System.out.println(s);
}