您的位置:首页 > 职场人生

黑马程序员_正则表达式

2014-01-04 16:18 447 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、qq号码验证

       对qq号码进行验证,要求qq号码符合三个条件1,5~15位,2,不能以0开头,3,只能是数字。

       1,普通验证

public class CheckQQ {
public static void main(String[] args) {
String qq = "23343434";
check_qq(qq);
}

private static void check_qq(String qq) {
if(qq.length()>=5&qq.length()<=15)
{
if(!qq.startsWith("0"))
{
try
{
Long l = Long.parseLong(qq);
System.out.println(l+"is ok");
}
catch (Exception e)
{
System.out.println("非法字符");
}
}else
{
System.out.println("不能以0开头");
}
}else
{
System.out.println("长度错误");
}
}

}//打印23343434is ok

        2,采用正则表达式的方式

public class CheckQQ {
public static void main(String[] args) {
String qq = "23345434";
check_qq(qq);
}

private static void check_qq(String qq) {
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("不存在");
}
}
}//打印23345434is ok

       通过两个程序可以看出,普通方式需要使用大量的ife-lse语句依次对每个条年进行判断,而使用正则表达式判断要简洁多。因此正则表达式用于处理字符串更加灵活。

二、正则表达式

       符合一定规则的表达式,专门用于操作字符串,简化字符串操作

       1,正则表达式的常见规则


 





[align=left] 三、正则表达式-匹配[/align]
[align=left]        String类的 matches(String regex)方法,告知此字符串是否匹配给定的正则表达式[/align]
[align=left]        需求:验证电子邮件的格式[/align]
private static void check_matches() {
String email = "shisong@163.com";
String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
boolean b = email.matches(regex);
System.out.println(b);
}

[align=left]四、正则表达式-切割[/align]
[align=left]       String类的split(String regex)方法,根据给定正则表达式匹配拆分此字符串[/align]
[align=left]       1,普通切割[/align]
public static void method_split(){
String str = "192      168    3      123";
String[] arr = str.split("(.)\\1+");
for(String s : arr){
System.out.println(s);
}
}//打印:192,168,3,123

[align=left]       2,利用组捕获--按叠词切割[/align]
[align=left]             正则表达式中用()定义组,利用\引用定义的组,组数默认从1开始[/align]
[align=left]             需求: 形如"abqqqqqcdettfdhhgtnssth"的字符串中含有叠词如qqqqq,按照这些叠词将字符串切割[/align]
[align=left]             2.1,第一位可以是任意字符,因此定义 .[/align]
[align=left]             2.2,将其定义成组(.)[/align]
[align=left]             2.3,第二位引用第一位组\\1,出现1或多次\\1+[/align]
[align=left]                 2.4,完整的定义规则为:(.)\\1+[/align]
public static void method_split(){

String  str = "abqqqqqcdettfdhhgtnssth";
//正则组,()专门处理叠词
String[] arr = str.split("(.)\\1+");
for(String s : arr){
System.out.println(s);
}
}//打印结果:ab,cde,fd,gtn,th

[align=left]五、正则表达式-替换[/align]
      
String类的replaceAll(String regex, String replacement)方法,使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
[align=left]       需求:将字符串"helllowssorrrrrld"中叠词如lll替换成单个字符l[/align]
[align=left]                  1,定义叠词规则:(.)\\1+[/align]
[align=left]                  2,替换的内容引用被替换的内容,使用$引用,标号由1开始[/align]
public static void method_replaceAll(){
String str = "helllowssorrrrrld";
String s = str.replaceAll("(.)\\1+","$1");
System.out.println(s);
}//打印:helowsorld

[align=left]六、正则表达式-获取[/align]
         
使用的是java.util.regex.Pattern,和java.util.regex.Matcher
[align=left]        1,步骤[/align]
[align=left]             1.1,定义正则表达式规则     [/align]
            
1.2,将正则封装成对象

             1.3,正则对象与要操作的字符串匹配,获取搜索引擎
[align=left]             1.4 使用Matcher类的方法  进行查找与获取[/align]
[align=left]         2,程序示例,需求:"wo de jia zai yuan fang ni mei qu guo",找出三个字母的单词[/align]
                  
2.1,定义正则规则:\\b[a-zA-Z]{3}\\b

                   2.2,封将正则封装成对象:Pattern p = Pattern.compile(reg)
[align=left]              2.3,获取搜索引擎:Matcher m = p.matcher(str)[/align]
[align=left]                  2.4,通过Matcher查找,获取[/align]

public static void method(){
String str = "wo de jia zai yuan fang ni mei qu guo";
//找出3个字母的单词
//预编译正则
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());
}
}//打印结果:jia,zai,mei,guo

[align=left]七、正则表达式总结[/align]
[align=left]       1,只想知道字符串是否是对错,选择匹配[/align]
[align=left]       2,将已有字串变成另一个字串,选择替换[/align]
[align=left]       3,想要按特定方式将字串变成多个子串,选择切割[/align]
[align=left]       4,拿到符合规则的子串,选择获取[/align]
[align=left]八、网页邮箱爬虫[/align]
       1,定义满足邮箱格式的正则表达式规则:String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"

       2,利用URLConnection建立 资源连接
[align=left]       3,利用流读取 网页内容[/align]
[align=left]       4,对读取的内容进行查找和获取[/align]
import java.net.*;
import java.util.regex.*;
import java.io.*;
class CatchEmail
{
public static void main(String[] args) throws Exception
{
String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
URL url = new URL("http://www.taobao.com");
//开启连接
URLConnection conn = url.openConnection();

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

String line = null;
while((line = bfr.readLine())!=null){
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(line);
while(m.find()){
System.out.println(m.group());
}
}

}
}


[align=left]
[/align]
[align=left] [/align]

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息