1.正则表达式简述
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式中符号的具体含义可以网上搜索。
在开发中判断用户的输入是否符合特定要求的类型格式时,使用正则表达式来进行格式判断是一种非常便捷的方式。
2.17种常用正则表达式
"^-?\d+$" //整数
"^\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+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?\d+)(\.\d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
3.Matcher中group()/group(int group)/groupCount()用法
package com.example.test.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatcherTest {
public static void main(String[] args)
Pattern p = Pattern.compile("(ca)(t)");
Matcher m = p.matcher("one cat,two cats in the yard");
StringBuffer sb = new StringBuffer();
boolean result = m.find();
System.out.println("groupCount为:"+m.groupCount());
for(int i=0;i<=m.groupCount();i++){
System.out.println("第"+i+"个子串为:"+m.group(i));
}
}
输出如下:
groupCount为:2
第0个子串为:cat
第1个子串为:ca
第2个子串为:t
可以这样理解:m.groupCount()表示()的个数,每个()表示需要一次匹配,这个小括号要特别注意。
m.group(0)表示要匹配满足正则表达式中所有括号里的字符串的第一个值,因此为cat。
m.group(1)表示匹配正则表达式中的第一个括号里的内容即可,因此为ca,注意,也是第一次的值。
m.group(2)表示匹配正则表达式中的第二个括号里的内容即可,因此为t,注意,也是第一次的值。
比如我今天使用"音量[\\s\\S]*?([1-9]{0,1}[0-9]?%)"来匹配“音量调整为30%”这样带有百分数的语句,最开始搞错了正则化表达式,匹配百分数的部分多了(),于是爆出了问题。反复调试后得到下面的用来判断百分数的正则化api,在需要判断输入字符串是否未百分数的地方调用isScore就可以得出结论。可以作为工具方法来使用,正则化就是这么方便。
//是否百分数
public static boolean isScore(String text) {
String regex = "([1-9]{0,1}[0-9]?%)";
Pattern p= Pattern.compile(regex);
Matcher m = p.matcher(text);
return m.find();
}
通常我们可以通过在线工具迅速检查自己的正则化表达式是否正确,比如http://tool.oschina.net/regex/#