[黑马程序员] 正则表达式

2014-11-24 10:36:22 · 作者: · 浏览: 0

0. 正则表达式: 符合一定规则的表达式. 用于专门操作字符串.


1. 用到的类 java.lang.String和java.util.regex.


2. 用String的matches()方法的栗子:

[java] view plaincopyprint
/*
* 判断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!!");
}

}

/*
* 判断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的单词的例子: [java] view plaincopyprint
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());
}
}
}

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语言中的正则应用, 但是大部分内容还是同样适用的.
http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97


10. Jamie Zawinski说:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.