码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2016-08-22 01:59:37      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:

1 正则表达式

 

package My;

/*

 * 正则表达式

 *

 * 正则表达式用于操作字符串数据

 * 通过一些特定的符号来体现的

 * 所以我们为了掌握正则表达式 必须要学习一些符号

 *

 *虽然简化了  但是阅读性差

 */

public class ZhengZe {

 

public static void main(String[] args) {

String qq="012222333322211";

checkQQ(qq);

String regex="[1-9][0-9]{4,14}"; //正则表达式

boolean b=qq.matches(regex);

System.out.println(b);

 

}

 

/*

 * 需求:定义一个功能对qq号进行校验

 * 要求:长度5-15 只能是数字 不能以0开头

 *

 */

public static void checkQQ(String qq)

{

int len=qq.length();

if(len>=5&&len<=15)

{

if(!qq.startsWith("0"))

{  

try

{

long l=Long.parseLong(qq);

System.out.println("qq格式正确");

}

catch(NumberFormatException e)

{

System.out.println("含有非法字符");

}

}

else

{

System.out.println(qq+"不能0开头");

}

}

else

{

System.out.println(qq+":长度错误");

}

}

 

}

 

 

 

2 常见的功能

package My;

 

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class Regex2 {

  public static void main(String[] args) {

/*

 * 正则表达式对字符串的常见操作

 * 1 匹配

 *   其实使用的是str类中的matches方法

 *

 * 2 切割

 *

 * 3替换

 *

 * 4 获取

 */

  

 // functionDemo1();

  //functionDemo2();

  //functionDemo3();

  functionDemo4();

}  

  

     /*

      * 演示获取

      *将正则规则进行对象的封装

      * Pattern p=Pattern.compile("a*b)";

      * 通过正则对象的match方法与字符串关联,获取要对字符串操作的匹配器对象Matcher

      * Matcher m=p.matcher("aaaaab");

      * 通过Matcher匹配器对象的方法对字符串进行操作

      * boolean b=m.mathes()

      *       

      */

   private static void functionDemo4() {

   String str="da jia hao,ming tian bu fang jia";

   

   String regex="\\b[a-z]{3}\\b";

   

   //1 将正则封装成对象

   Pattern p=Pattern.compile(regex);

   //2 通过正则对象获取匹配器对象

   Matcher m=p.matcher(str);  //与字符串关联

   

   //使用Matcher对象的方法对字符串进行操作

   //既然要获取三个字母组成的单词

   //查找 find();

   System.out.println(str);

   while(m.find())

   {

   System.out.println(m.group());//获取匹配的子序列

   System.out.println(m.start()+":"+m.end());

   }

   

}

/*

    * 替换演示

    */

  private static void functionDemo3() {

 /* String str="zhangsanooooolisittttzhaoliu";

  str=str.replaceAll("(.)\\1+","$1");

  System.out.println(str);

  */

  

  String tel="18305980070";

  tel=tel.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");

  System.out.println(tel);

  

}

 

//切割

  

  //要明白组的概念 按照左括号去数 组

  private static void functionDemo2() {

  String str="zhangsantttttxiaoqiangdddzhaoliu";

  

  String []names=str.split("(.)(t)\\2+");  //.在正则表达式中是一个特殊符号 代表任意字符

  for(String s:names)

  {

  System.out.println(s);

  }

}

/*

   * 演示 1匹配

   */

   public static void functionDemo1()

   {

   //匹配手机号码是否正确

   String tel="18305980070";

   

   String regex="1[358]\\d{9}";

   

   boolean b=tel.matches(regex);

   System.out.println(tel+":"+b);

   }

}

 

 

3 练习

 

package myNew1;

 

import java.util.TreeSet;

 

public class RegexPractice {

  public static void main(String[] args) {

 //practice1();

// practice2();

 practice3();

}

 

private static void practice3() {

/*

 * 练习3 对邮件地址进行校验

 */

String mail="sina@123.com.cn";

 

String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z_]{0,3})+";

boolean b=mail.matches(regex);

System.out.println(mail+":"+b);

 

}

 

private static void practice2() {

/*

 * 练习2 ip地址排序

 * 172.168.3.2  1.0.3.0  3.3.3.3 196.7.0.5

 *

 * 该如何排序呢?

 * 首先 尝试把全部都补成三位  可以全部先补两个0

 *

 */

String str="172.168.3.2       1.0.3.0  3.3.3.3 196.7.0.5";

//全部都补两个0

 

str=str.replaceAll("(\\d+)", "00$1");

 

//变成三位一组的

str=str.replaceAll("0*(\\d{3})","$1");

 

 

//切割成子字符串

String []ips=str.split(" +");

//利用集合的特点进行排序

TreeSet<String> ts=new TreeSet();

for(String ip:ips)

{

ts.add(ip);

 

}

for(String t:ts)

{

System.out.println(t.replaceAll("0*(\\d)","$1"));

}

 

}

 

private static void practice1() {

 

/*

 * 练习1 治口吃

 *

 * 我我我我我我我.......爱爱爱爱爱爱.......中中中中中中......国国

 *

 *

 *

 */

String str="我我我我我我我.......爱爱爱爱爱爱.......中中中中中中......国国";

str=str.replaceAll("\\.+", "");

str=str.replaceAll("(.)\\1+","$1");

System.out.println(str);

}

}

 

 

4爬虫

package myNew1;

 

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class NetSpider {

  public static void main(String[] args) throws Exception {

 List<String> list=getMails();

 List<String> list1=getMailByWeb();

}

 

private static List<String> getMailByWeb() throws Exception {

  

   URL url=new URL("http://www.baidu.com");

   BufferedReader bufr=new BufferedReader(new InputStreamReader(url.openStream()));

 

 

//2 对读取的数据进行规则的匹配。从中获取符合规则的数据

String mail_regex="\\w+@\\w+(\\.\\w+)+";

 

List<String> list=new ArrayList<String>();

 

 

Pattern p=Pattern.compile(mail_regex);

 

String line=null;

 

while((line=bufr.readLine())!=null)

{

Matcher m=p.matcher(line);

while(m.find())

{

//将符合规则的数据添加到集合中

list.add(m.group());

}

}

return list;

}

 

private static List<String> getMails() throws Exception {

 

//1 读取源文件

BufferedReader bufr=new BufferedReader(new FileReader("c:\\web.html"));

 

//2 对读取的数据进行规则的匹配。从中获取符合规则的数据

String mail_regex="\\w+@\\w+(\\.\\w+)+";

 

List<String> list=new ArrayList<String>();

 

 

Pattern p=Pattern.compile(mail_regex);

 

String line=null;

 

while((line=bufr.readLine())!=null)

{

Matcher m=p.matcher(line);

while(m.find())

{

//将符合规则的数据添加到集合中

list.add(m.group());

}

}

return list;

}

}

 

正则表达式

标签:

原文地址:http://www.cnblogs.com/HJL085/p/5794144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!