正则表达式

来源:互联网 发布:卫生网络直报系统网址 编辑:程序博客网 时间:2024/05/29 19:54



符合一定规则的表达式。

作用:用于专门操作字符串

特点:用一些特定的符号来表示一些代码操作。这样就简化了书写.
所以学习正则表达式,就是在学习一些特殊符号的使用。

好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性越差

用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。

只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。

(aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有几个左括号就是几组。



注意:正则表达式中的反斜杠会一对对出现


--------------------------------------------------------------------------------------------------------------
具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false

2.切割:String split() 

3.替换:String replaceAll()

4.获取:将字符串中的符合规则的子串取出

操作步骤:
1.将正则表达式封装成对象。
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出。


   
按照叠词完成切割:为了可以让规则的结果被重用
   可以将规则封装成一个组。用()完成。租的出现都有编号。
   从1开始。想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取

例子:
 (erkkrttczzzo)
   regex("(.)\\1+")    (.)代表第一个是任意字符   \\1 第二位判断是否拿第一个的结果,不匹配就往下走,继续。
   要想获取组(.) 里的字符,用$1  可以将叠词的字符替换成单个字母  zzzz->z

---------------------------------------------------------------------------------------------------------------
常用规则:(查询String  matches 正则表达式)
[abc]或[a-z]    只能匹配一个字符,并且只能是中括号里的某一个字符,第二个就继续写在后面
[abc]ab 或 c(简单类)[^abc]任何字符,除了 ab 或 c(否定)[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)[a-d[m-p]]a 到 d 或 m 到 p[a-dm-p](并集)[a-z&&[def]]de 或 f(交集)[a-z&&[^bc]]a 到 z,除了 b 和 c[ad-z](减去)[a-z&&[^m-p]]a 到 z,而非 m 到 p[a-lq-z](减去)

-------------------------------------------------------------------------------------------------
匹配例子:
对QQ号码进行校验
要求:5-15  0不能开头,只能是数字

class Demo
{
public static void main(String[] args)
{

}

public static void checkQQ()
{
String qq="123467";

String regex="[1-9] [0-9] [4,14]";  //凡是看到regex就知道定义了规则

boolean fag=qq.matches(regex); //告知此字符串是否匹配给定的正则表达式

if(flag)
System.out.println(qq+"...OK");
else
System.out.println(qq+"...不匹配")

}
}

---------------------------------------------------------------------------------------------------------------

获取例子:

import java.util.regex.*

class RegexDemo
{
public static void main(String[] args)
{

}
public static void getDemo()
{
String str="ming tian fang jia ,dada";

String reg="\\b[a-z]{4}\\b";  //   \\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());//获取字符串的开头结尾角标

}
}
}

注意:
因为规则只定义了前4个和边界,那么匹配到tian的时候,不符合规则,matcher会返回flase
由于使用的是同一个匹配器,那么m.find()第二次的时候,直接从tian开始,
会出现不显示ming的情况

-------------------------------------------------------------------------------------------

正则表达式使用思路:
1.如果只想知道该字符是否对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的字符串变成多个字符串,切割。获取规则以外的子串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串

-----------------------------------------------------------------------------------------

网页爬虫(蜘蛛)
class Regex
{
public static  void main(String[] args)
{
getMails();
}
//获取网页地址
public static void getNet() throws Exception
{
Url=new URL("http://www.baidu.com");
URLConnection conn=url.openConnection();

BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line=null;

String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.complie(mailreg);

while((line=bufIn.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
System.out.println(m.group());

}

/*
获取指定文档中的邮件地址
使用获取功能。Pattern  Matcher
*/
public static void getMails() throws Exception
{
BuffereReader bufr=new BufferReader(new FileReader("mail.txt"));

String line=null;

String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.complie(mailreg);

while((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}

}






0 0
原创粉丝点击