正则,String中用法,Pattern Matcher

Posted guoDaXia的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则,String中用法,Pattern Matcher相关的知识,希望对你有一定的参考价值。

package com.正则表达式;

import java.util.Scanner;

/**
 * 
 * 校验qq号码
 *         1:要求必须是5-15位数字
 *         2: 0不能开头
 * 分析:
 *         A:键盘录入qq号码
 *         B:写一个功能
 *         C:调用功能,输出结果
 *
 */
public class RegexDemo {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的qq号码:");
        String qq=sc.nextLine();
        System.out.println("checkQQ:"+checkQQ(qq));
    }
    /**
     * 写一个实现校验
     * 两个明确:
     * 返回值类型:boolean
     * 参数列表:String qq
     */
    
    public static boolean checkQQ(String qq){
        boolean flag=true;
        if(qq.length()>=5 && qq.length()<=15){//位数
            if(!qq.startsWith("0")){//开头
                char[] cha=qq.toCharArray();
                for(int i=0;i<cha.length;i++){//内容
                    if(!Character.isDigit(cha[i])){
                        flag=false;
                        break;
                    }
                }
            }else{
                flag=false;
            }
        }else{
            flag=false;
        }
        return flag;
    }
}
引入正则
package com.正则表达式;

import java.util.Scanner;

/**
 * 
 * 正则表达式:符合一定规则的字符串
 *
 */
public class RegexDemo2 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的qq号码:");
        String qq=sc.nextLine();
        System.out.println("checkQQ:"+checkQQ(qq));
    }
    
    public static boolean checkQQ(String qq){
        //String regex="[1-9][0-9]{4,14}";
        //public boolean matches(String regex) 告知此字符串是否匹配正则表达式
        //boolean flag=qq.matches(qq);
        return qq.matches("[1-9][0-9]{4,14}");
    }
}
引入正则2

正则表达式要求:

A:字符
    x 字符x。举例:‘a’表示字符a
    \\\\ 反斜线字符
    \\n 换行符(\'\\u000A\')
    \\r 回车符(\'\\u000D\')
B:字符类
    [abc] a、b或者c(简单类)
    [^abc] 除了abc外的其他一个字符
    [a-zA-Z] a到z或A到Z,两头的字母都包括在内
    [0-9]    0-9内的字符都包括
C:预定义字符类
    .表示任何字符。表示本身使用\\转义
    \\d 数字0-9,[0-9]
    \\D 非数字 
    \\s 非空白字符
    \\S 非空白字符
    \\w 单词字符:[a-zA-Z_0-9]
        在正则表达式里面组成单词的东西必须由这些东西组成
D:边界字符
    ^ 行的开头
    $ 行的结尾
    \\b 单词字符
        就是不是单词字符的地方
        举例:hello world?haha;xixi
E:数量词
    X? X出现0次或者一次
    X* X出现0次或者多次
    X+ X出现1次或多次
    X{n} X出现恰好n次
    X{n,} X出现至少n次
    X{n,m} X出现至少n次,但是不超过m次
F:字符集
    字面值转义     \\x 
          分组 [...] 
          范围 a-z 
          并集 [a-e][i-u] 
          交集 [a-z&&[aeiou]] 

    
package com.正则表达式._2;

import java.util.Scanner;

/*
 * 
 * 判断功能
 *         String类的public boolean matches(String regex)
 *
 * 需求:
 *         判断手机号码是否满足功能
 * 分析:
 *     A:键盘录入手机号码
 *     B:定义手机号码的而规则
 *         1开头,11位数,全部数字
 *     C:调用功能,判断即可
 *     D:输出结果
 * 需求:
 *         校验邮箱
 * 分析:
 *     A:键盘录入手机号码
 *     B:定义邮箱的规则
 *         1开头,11位数,全部数字
 *     C:调用功能,判断即可
 *     D:输出结果
 */
public class RegexDemo01 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入邮箱:");
        String email=sc.nextLine();
        //String regex="[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\\\.[a-zA-Z_0-9]{2,3})+";
        String regex="\\\\w+@\\\\w{2,6}(\\\\.\\\\w{2,3})+"; 
        boolean flag=email.matches(regex);
        System.out.println(flag);
    }
    public boolean pdphone(){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的手机号码:");
        String phone=sc.nextLine();
        String regex="[1]\\\\d{10}";
        boolean flag=phone.matches(regex);
        return flag;
    }
}
判断
package com.正则表达式._2;

import java.util.Arrays;
import java.util.Scanner;

/*
 * 分割功能
 *         public String[] split(String regex)
 *          根据给定正则表达式拆分字符串
 * 
 * 举例:
 *         百合网,世纪佳缘,珍爱网,QQ
 *         搜索好友
 *             性别:女
 *             范围:“18-24”
 * 
 *         age>=18 && age<=24
 * 
 * 定义一个字符串,分割
 * 
 * 将”91 27 46 38 50“输出最终为”27 38 46 50 91“
 */
public class RegexDemo02 {
    public static void main(String[] args) {
        String str1="91 27 46 38 50";
        String[] strArray=str1.split(" ");
        int[] arr=new int[strArray.length];
        for(int i=0;i<strArray.length;i++){
            arr[i]=Integer.parseInt(strArray[i]);
        }
        Arrays.sort(arr);
        StringBuilder sb=new StringBuilder("");
        for(int i=0;i<arr.length;i++){        
                sb.append(arr[i]+" ");
            
        }
        System.out.println(sb);
    }
    public void test02(){
        String s1="aa,bb,cc";
        String[] str1Array=s1.split(",");
        for(int i=0;i<str1Array.length;i++){
            System.out.println(str1Array[i]);
        }
        System.out.println("------------------------");
        s1="aa.bb.cc";
        str1Array=s1.split("\\\\.");
        for(int i=0;i<str1Array.length;i++){
            System.out.println(str1Array[i]);
        }
        System.out.println("-------------------");
        s1="aa bb   cc";
        //str1Array=s1.split("\\\\s+");
        str1Array=s1.split(" +");
        for(int i=0;i<str1Array.length;i++){
            System.out.println(str1Array[i]);
        }
        System.out.println("-------------------");
        s1="E:\\\\JavaSE\\\\day14\\\\avi";
        str1Array=s1.split("\\\\\\\\");
        for(int i=0;i<str1Array.length;i++){
            System.out.println(str1Array[i]);
        }
        System.out.println("-------------------");
    }
    public void test01(){
        //定义一个年龄搜索范围
        String ages="18-24";
        String regex="-";
        String[] strArray=ages.split(regex);
        /*for(int x=0;x<strArray.length;x++){
            System.out.println(strArray[x]);
        }*/
        int startAge=Integer.parseInt(strArray[0]);
        int endAge=Integer.parseInt(strArray[1]);
        
        Scanner input=new Scanner(System.in);
        System.out.println("请输入你的年龄:");
        int age=input.nextInt();
        if(age>=startAge && age<=endAge){
            System.out.println("你就是我想找的");
        }else{
            System.out.println("不符合我的要求");
        }
    }
}
分割
package com.正则表达式._2;
/*
 * 正则表达式用于替换:
 *     public String replaceAll(String regex,String replacement) 使用给定的字符串替换本字符串中所有匹配给定正则表达式的子字符串
 *     public String replaceFirst(String regex,String replacement) 使用给定的字符串替换本字符串中第一个匹配给定正则表达式的子字符串
 */
public class RegexDemo03 {
    public static void main(String[] args) {
        String s="helloqq12345worldkh12313423java";
        String regex="\\\\d+";
        //String regex="\\\\d";
        String ss="*";
//        String result=s.replaceAll(regex, ss);
//        System.out.println(result);
        String result=s.replaceFirst(regex, ss);
        System.out.println(result);
    }
}
替换
package com.正则表达式._2;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * 前面使用String中的方法操作正则表达式进行字符串的判断、切割、替换
 * 如果要使用查找功能的话,使用String类就无法达到了。
 * 
 * Pattern  
 *     模式 正则表达式的编译表达形式
 *     它主要是用来创建对应的匹配器对象然后使用匹配器对象的方法进行匹配
 *  版本1.4开始
 *  没有构造,
 *      compile(String regex) 获得匹配器对象
 *         pattern() 返回在其中编译过此模式的正则表达式
 *         String[] split(CharSequence input) 根据此模式的匹配拆分输入序列
 *         matches(CharSequence input) 创建此模式的匹配器
 *         static matchers(CharSequence input) 静态的,相当于compile方法和matcher方法的一步到位
 *    Matcher
 *        匹配器 通过解析Pattern对character sequence执行匹配操作的引擎
 *         使用它一般执行三种不同的匹配操作:
 *            matches 尝试将整个输入序列与该模式匹配
 *            lookingAt 尝试将该输入序列从头开始于该模式匹配,与matches不同的是它不需要匹配整个字符串
 *            find 尝试查找与该模式匹配的输入序列的下一个子序列  find与lookingAt的区别在于“下一个”
 *      方法:
 *      int end()返回最后匹配字符之后的偏移量,就是它的下标
 *      boolean find()
 *      boolean find(int start) 重置匹配器,然后从索引处开始查找
 *      String group() 返回由以前匹配操作所匹配的输入子序列,就是返回匹配的输入字符串序列
 *      int group() 返回匹配的序列的数量
 *      boolean lookingAt() 尝试将区域开头开始的输入序列与该模式匹配
 *      quotReplacement(String s) 返回指定String的字面替换String,相当于String中的replaceAll
 *      Matcher region(int start,int end) 设置匹配器区域
 *      int regionStart() 返回匹配器匹配区域的开始索引
 *      int regionEnd() 返回匹配器匹配区域的结束索引
 */
public class PatternAndMatcher {
    public static void main(String[] args){
        testFind();
    }
    public void testPattern(){
        String s="fghgf sashg sas sa";
        String regex="\\\\s+";
        Pattern p=Pattern.compile(regex);
        String[] strArray=p.split(s);
        System.out.println(Arrays.toString(strArray));
        System.out.println(p.pattern());
    }
    public static void testFind(){
        String s="hello , nice to meet you ! I\'m guo zhen , let\'s me play with game !";
        String regex="\\\\b\\\\w{3}\\\\b";
        Pattern p=Pattern.compile(regex);
        Matcher m=p.matcher(s);    
        while(m.find()){
            String s1=m.group();
            System.out.println(s1);
        }
        
    }
}
查找和构造器与模式

 

以上是关于正则,String中用法,Pattern Matcher的主要内容,如果未能解决你的问题,请参考以下文章

Java通过Pattern类使用正则表达式

python正则表达式

JAVA中的正则表达式简介

Python 正则表达式提高

java正则pattern的正确用法怎么用

re.sub用法