0. 正则表达式: 符合一定规则的表达式. 用于专门操作字符串.
1. 用到的类 java.lang.String和java.util.regex.
2. 用String的matches()方法的栗子:
/*
* 判断QQ号是否合法.
*
*/
public class RegexDemo {
public static void main(String[] args) {
checkQQ();
}
public static void checkQQ()
{
String qq = "12325925a2";
String regex = "[1-9][0-9]{4,14}"; //定义匹配规则
boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"...is ok");
else
System.out.println(qq+"...wrong!!");
}
}
3. 正则的功能: 匹配、切割、替换、获取等
4. 匹配功能: String.matches()方法.
\\ 代表\
\n 代表换行
...等等...
[abc] 代表a或b或c (可以是数字)
[^abc] 代表除a,b,c以外的
[a-zA-Z] 代表a到z和A到Z并集
. 代表任意字符
\d 数字[0-9]
\D 除0到9
\s 代表空白字符, [ \t\n\x0B\f\r]
\S 非空白字符
\w 单词字符[a-zA-Z0-9]
\W 代表[^\w]
X? 代表X出现一次或没有
X*? 出现零次或多次
X+? 代表X出现一次或多次
X{n} 出现n次
X{n,} 出现最少n次
X{n,m} 出现n到m次(包括)
5. 切割功能: String的split()方法.
(.)\1 用小括号括起来表示组, 编号从左到右从1开始(组0代表整个表达式). \1表示第一组所匹配过的再次出现.
例如: "sdfqqKjljkksdzz".split("(.)\\1") 可以将字符串从qq,kk,zz处分割.
6. 替换功能: String的replaceAll()方法和replaceFirst().
"abccdeffg".replaceAll("(.)\\1", "$1"); 得到"abcdefg"字符串. $符号表示取前一个正则表达式的组.
7. 获取功能:
- 将正则表达式封装成对象.
- 让正则对象和字符串关联.
- 关联后, 获取正则匹配引擎.
- 通过引擎对符合规则的字串进行操作, 比如取出使用java.util.Matcher的group()方法取出, 使用group()取出之前需要先用find()方法查找一下.
8. 取出长为3的单词的例子:
import java.util.regex.*;
class RegexDemo2
{
public static void main(String[] args)
{
getDemo();
}
// 获取长为三的单词.
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le ,da jia. ";
String reg = "\\b[a-zA-Z]{3}\\b";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group());
System.out.println(m.start()+"...."+m.end());
}
}
}
9. 这个讲正则的, 虽然是Python语言中的正则应用, 但是大部分内容还是同样适用的.
10. Jamie Zawinski说:
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
当一个人遇到问题的时候想:"我用正则就能解决", 好吧, 现在他们一共有俩问题了.