正则表达式
一、正则表达式
正则表达式是符合一定规则的表达式。用一些特定的符号来表示一些代码操作,专门用于操作字符串。正则表达式的弊端:正则越长,阅读性越差。可以简化对字符串的复杂操作。先举出了一个例子:对QQ号码进行校验。对qq号码的要求是5~15位,0不能开头,只能是数字。原始的方法有两种:if判断和Integer的parseInt()静态方法判断是不是数字。
我们可以使用 类String的方法将String对象按照正则表达式匹配,切割,替换,获取
二、正则表达式的功能
1、匹配
使用String类的match(String regex)方法,返回的是boolean。
“[abc]” 表示操作对错:如果有一个字符,而且这个字符是a、b或c,返回true
[]
\d
*
?
\w
……
2、切割
使用String类的split(String regex)方法。1按一个或多个空格切的正则表达式是(“ +”),2“。”表示按任意字符切,“\\。”表示按。切,3按减斜线切“\\\\”,4按重复一次或多次切“(。)\\1+”。当要对一个结果重用时,用()将其封装成一个组。返回的是规则以外的字符串。
3、替换
replaceAll(
String regex,
String replacement)
。将重叠的字符替换成单个字符(“(。)
\\1+”
,“$1” ),$表示获取组中的字符。返回的是新字符串。
4、获取
简单获取字符串的子串,可以使用 类String 的方法substring(int beginIndex)
substring(int beginIndex,
int endIndex)
。用正则表达式可以实现较复杂的获取。
步骤是1将正则表达式封装成对象,2让正则对象和要操作的字符串相关联。3关联后,获取正则匹配引擎,4通过引擎对符合规则的子串进行操作,比如取出。
关于正则表达式,在api中有描述。包
java.util.regex中
类
Pattern 可以对正则表达式进行封装。类 Pattern没有对外的构造函数,不可以创建对象。方法compile(
String regex)
和方法
compile(
String regex,
int flags
)是静态的,返回类型是本类对象。
matcher(
CharSequence input)
,返回类型是
类Matcher 类型。
类Matcher中有 方法
matches()
,返回boolean
;
方法
group()
,返回的是获取匹配后的结果,要先使用
方法
find()
进行匹配。功能类似于迭代器。在正则表达式中有边界匹配器。
\b是单词边界匹配器,例如
”
\\b[a-z]{4}\\b
”
是一个规定一个单词由4个小写字母组成
,的正则表达式。需要注意的是同一个匹配器用的是同一个索引位
三、
邮箱匹配
1、
相对精确的匹配
”
[a-zA-Z0-9_]+@[a-
zA-Z0-9
]+(\\.
[a-
zA-Z0-9
]+)+
”
;
相对不太精确的匹配
”
\\w+@\\w+(\\.\\w+)+”
只要有@就行:indexOf(
“
@
”
)!=-1
2、
网页爬虫(
用于获取邮箱)
import java.io.*;
import java.util.regex.*;
import java.ner.*;
class WebpageReptile{
private webaddr ;
WebpageReptile(String webaddr) {
this.webaddr = webaddr ;
}
public static void webpageReptile()throws Exception {
URL url = new URL(webaddr);
URLConnection conn = url.openConnerction();
BufferedReader bufIn =
newBufferedReader(new InputStreamReader(conn.getInputStream));
String line = null;
String mailReg = "\\w+@\\w+(\\.\\w+)+";
while((line = bufIn.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
so.p(m.group)
}
}
}
}