java-正则表达式

来源:互联网 发布:javaweb程序员简历 编辑:程序博客网 时间:2024/06/11 10:08





 * 正则表达式:符合一定规则的表达式

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

 * 特点:用于一些特定的符号来表示一些代码操作,这样就能简化书写;

 * 好处:可以简化对字符串的复杂操作。

 * 

 *注意:

 * 在正则表达式中 反斜杠是一对一对的出现

 * 

 * 

 * 

 * 具体操作功能:

 * 1,匹配:String matches方法

 * boolean matches(String regex

 告知此字符串是否匹配给定的正则表达式。 


   2,切割:String[] split()
   
   3,替换:String replaceAll();
   
   4,获取 :使用Pettern 对象 Matcher对象


密码  包含数字 英文 特殊字符 6到16位

String ss = "^[a-zA-Z0-9`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]{6,16}$"


第一个例子:匹配功能的演示


第一个例子:匹配功能的演示 * 需求1: * 对QQ号码进行校验 * 要求;5-15位,0不能开头,只能是数字 * 如果用普通的String方法来进行校验很复杂 * 但是用正则表达式会很简单  需求2:  对手机号码进行校验 * 判断手机号码  手机号段只有 13xxxxx,15xxxxx,18xxxxx  共11位 * import java.lang.*;public class RegexDemo{    public static void main(String[] args)    {chackQQ();chackTel();    }    public static void chackQQ()    {String qq = "123456789";// 这个意思是:第一位只能是1到9的数字,从第二位开始到// 结束出现4到14次String regx = "[1-9][0-9]{4,14}";// 创建规则//也可以改成这样//String regx = "[1-9]//d{4,14};// 调用规则boolean flag = qq.matches(regx);if (flag){    System.out.println(qq + "....is ok");} else{    System.out.println(qq + ".....格式错误");}    }        public static void chackTel()    {String tel = "13500000111";//创建规则  第1个号码是1 第2个号码是358其中一个//第3个号码到第11个号码是数字 剩下的还有9个数String telReg = "1[358]\\d{9}";boolean flag = tel.matches(telReg);if(flag){    System.out.println(flag + "...是手机号码");}else{    System.out.println(flag + "不是手机号码");}    }}








***************************************************邪恶的分割线**********************************************************************************************************************


第二个例子:切割功能的演示


/** * 字符串切割,用正则表达式 */import java.lang.*;public class RegexDemo2{    public static void main(String[] args)    {// 需求一// 按照空格进行切割(可能出现多个空格)// splitDemo("zhangsan lisi   wangwu"," +");// 需求二// 按照反斜杠斜杠进行分割(在正则表达式中反斜杠一般成对出现)进行转义// splitDemo("c:\\java\\a.txt","\\\\");/** * 需求三: 按照叠词进行切割(第一种只有两个叠词,第二种有两个或者两个以上叠词) * 在这里使用了组的概念:可以将规则封装成一个组,用()完成,组的出现都有编号 * 从1开始,想要使用已有的组可以通过\n(n是组的编号)的形式来获取 */// splitDemo("aqbbcdde","(.)\\1");//这是用两个叠词切割splitDemo("aqq9bbcdddde", "(.)\\1+");// 这是用多个叠词切割    }    public static void splitDemo(String str, String reg)    {// 对str进行按照reg规则进行切割,并把值赋给字符串数组arrString[] arr = str.split(reg);System.out.println(arr.length);// 进行输出for (String s : arr){    System.out.println(s);}    }}






***************************************************邪恶的分割线**********************************************************************************************************************





第三个例子:替换



/** * 正则表达替换 替换:String replaceAll(); *  * @author Administrator *  */public class RegexDemo3{    public static void main(String[] args)    {/** * 第一个例子:将wo13545667886caici3456中的数组替换成# 数字要求连续超过5个的, (比如论坛发帖,留电话不然留) *  * 分析规则:\\d{5,} 首先判断是数字\\d 然后判断位数是否超过5个{5,}, 这个代表5个或者5个以上 */String str = "wo13545667886caici3456";replaceAll(str, "\\d{5,}", "#");/** * 第二个例子:将asdffffffdwwjedfffsseeecao中的 叠词替换成* *  */String str1 = "asdfffiwwedffflssyeeeecao";// replaceAll(str1,"(.)\\1","*");//这个是代表只替换叠词为2的replaceAll(str1, "(.)\\1+", "*");/** * 第三个例子:将多个叠词比如eee替换成e 需要用到$符号 他代表使用前一个组的内容 1代表组号 代表第一个组 */String str2 = "asdfffiwwedffflsseeeecao";replaceAll(str2, "(.)\\1+", "$1");    }    public static void replaceAll(String str, String reg, String newReg)    {// 进行按照reg规则替换成newRegstr = str.replaceAll(reg, newReg);System.out.println(str);    }}






***************************************************邪恶的分割线**********************************************************************************************************************


第四个例子:获取



/** * 正则表达第四个功能。 * 4,获取:将字符串中的符合规则的字串取出。 *  * 操作步骤: * 1,将正则表达式封装成对象  使用Pettern * 2,让正则对象和要操作的字符串相关联 * 3,关联后,获取正则匹配引擎 * 4,通过引擎对符合规则的字串进行操作,比如取出 *  * 需求将字符串 ming tian jiu yao fang jia la , da jia 中的 * 三个字符的单词取出 *  * 小知识 :看表: \b表示单词边界 *  * java.util.regex 这个包中 只有两个类: * Matcher : * boolean find()  尝试查找与该模式匹配的输入序列的下一个子序列。  String group()  返回由以前匹配操作所匹配的输入子序列。  *  Pattern:static Pattern compile(String regex)  将给定的正则表达式编译到模式中。  *  *  */import java.util.regex.*;public class RegexDemo4{    public static void main(String[] args)    {getDemo();    }    public static void getDemo()    {String str = " ming tian jiu yao fang jia la , da jia";// String reg = "[a-z]{3}";这种会将只要有三个单词的就获取 (不符合需求)// \b是表示单词边界,前后将单词加载中间String reg = "\\b[a-z]{3}\\b";// 将规则封装成对象Pattern p = Pattern.compile(reg);// 让正则对象和要作用的字符串相关联,获取匹配器对象Matcher m = p.matcher(str);// 其实String类中的matches方法,用的就是Pattern和Matcher对象// 来完成的..只不过String 的方法封装后,用起来较为简单,但是功能单一。// find()将规则作用于字符串上,并进行符合字串的查找while (m.find()){    // 获取匹配后的结果    System.out.println(m.group());}    }}






***************************************************邪恶的分割线**********************************************************************************************************************



替换的练习:


将ip地址段的顺序进行排序


import java.util.Arrays;import java.util.*;/** * 需求1:将ip地址段的顺序进行排序 *  * 思路:使用替换 *  * 需求2:对邮箱进行验证 *  *  * @author Administrator *  */public class RegexDemo5{    public static void main(String[] args)    {ipSort();youjian();    }    /**     * 思路:是用正则表达替换 还按照字符串自然顺序,只哎哟让他们每一段就是3位即可。 1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3为     * 2,将每一段只保留三位,这样,所有的ip地址都是每一段3位, 3,然后将前面为0的消去     */    public static void ipSort()    {String ip = "192.68.256 102.46.23.013 10.10.10.10 2.2.2.2 8.109.90.30";// 规则:将组数字前面添加两个零ip = ip.replaceAll("(\\d+)", "00$1");System.out.println(ip);// 规则:将位数变为三位ip = ip.replaceAll("0+(\\d{3})", "$1");System.out.println(ip);// 按照空格进行切割String[] arr = ip.split(" ");// 进行排序/** * 方式一 :可以用 Arrays.sort进行排序 *//* * Arrays.sort(arr); for(int i=0 ;i<arr.length ;i++) { * System.out.println(arr[i]); } *//** * 方式二: 用TreeSet进行排序 *  */TreeSet<String> ts = new TreeSet<String>();for (String s : arr){    ts.add(s);}for (String s : ts){    System.out.println(s.replaceAll("0+(\\d+)", "$1"));}    }    /**     * 需求二: 对邮件地址进行校验     */    public static void youjian()    {String mail = "abc123d@sina.com";// 创建规则/** * [a-z0-9A-Z_] 是数字英文或者下划线 + 这样的字符有多位 *  * @ 有这个字符 *  * [a-zA-z0-9] 域名必须是字母或者数字 *  * (\\.[a-zA-Z]+) “.” 前面必须加\\ 可能是.com *  * 后面还有一个加号 代表可能是.com.cn *  *  */String reg = "[a-z0-9A-Z_]+@[a-zA-z0-9]+(\\.[a-zA-Z]+)+";// 较为精确的// reg = "\\w+@\\w+(\\.\\w+)+";//较为笼统的规则boolean flag = false;flag = mail.matches(reg);if (flag){    System.out.println("邮件验证成功");} else{    System.out.println("验证失败");}    }}





***************************************************邪恶的分割线**********************************************************************************************************************



练习一:

将下列字符串转成:我要学编程


/** * 需求: 将下列字符串转成:我要学编程 *  * 思路方式: 1,如果只想知道该字符是否是对是错,使用匹配。 2,想要将已有的字符串编程另一个字符串,替换。 * 3,想要按照自定的方式将字符串编程多个字符串,七个,获取规则以外的字串 4,想要拿到符合需求的字符串字串,获取。获取符合规则的字串 *  * @author Administrator *  */public class RegexTest{    public static void main(String[] args)    {test_1();    }    public static void test_1()    {String str = "我我...我我...我要..要要...要要...学学学....学...编编编...编程..程.程程...程...程";/** * 思路: 将已有字符串编程另一个字符串,使用替换功能. 1,现将.去掉。 2,再将多个重复的内容编程单个内容。 */// 将.去掉str = str.replaceAll("\\.", "");System.out.println(str);// 将叠词替换成单个str = str.replaceAll("(.)\\1+", "$1");System.out.println(str);    }}






***************************************************邪恶的分割线**********************************************************************************************************************


练习二:


import java.net.*;import java.util.regex.*;import java.io.*;/** * 需求一:从文件中读取数据,并把邮箱读出 需求二:从网页中读取数据,并把邮箱读出(网页爬虫) *  * 思路:因为要读出邮箱 ,所以要用获取 用获取 就要用 Pattern 和Matcher *  * @author Administrator *  */public class RegexText2{    public static void main(String[] args) throws Exception    {getMail_2();    }    // 完成需求一    public static void getMail_1() throws Exception    {// 建立读取文件对象BufferedReader buf = new BufferedReader(new FileReader("D:/Student/java/mail.txt"));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";// 使用规则 并封装到Pattern中Pattern p = Pattern.compile(mailReg);while ((line = buf.readLine()) != null){    // 因为每一行都要匹配 所以匹配在循环里面    Matcher m = p.matcher(line);    // 匹配器引擎    while (m.find())    {System.out.println(m.group());    }}    }    // 完成需求二    public static void getMail_2() throws Exception    {URL url = new URL("http://tieba.baidu.com/p/2060050551");// 获取连接器URLConnection conn = url.openConnection();// 建立读取网页的流BufferedReader bufin = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;String mailReg = "\\w+@\\w+(\\.\\w+)+";// 使用规则 并封装到Pattern中Pattern p = Pattern.compile(mailReg);while ((line = bufin.readLine()) != null){    // 因为每一行都要匹配 所以匹配在循环里面    Matcher m = p.matcher(line);    // 匹配器引擎    while (m.find())    {System.out.println(m.group());    }}    }}








------- android培训、java培训、期待与您交流! ----------

原创粉丝点击