正则表达式

Posted 曹某某的博客

tags:

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

符合一定规则的表达式

1:判断QQ号是否合法(5~15位   不能以0开头   只能是数字)--------------------------------------匹配

    matches(String regex)  告知此字符串是否匹配给定的正则表达式

import java.util.Scanner; 
public class Main {  
    public static void main(String[] args) { 
      Scanner s = new Scanner(System.in);
      while(s.hasNext()){
          String string = s.nextLine();
          checkQQ(string);
      }
      s.close();
    }
    public static void checkQQ(String string){
        String regex = "[1-9][0-9]{4,14}";
        if(string.matches(regex)){
            System.out.println("合法");
        }
        else{
            System.out.println("不合法");
        }
    }
}
View Code

 0~9:\\d  而出现在字符串中为  "\\\\d"  非0~9  \\D

\\w  单词字符(包括下划线)  \\W 非单词字符

采用Greedy数量词     ?  一次或零次    *   任意次   +   一次或多次     {n}  恰好n次   {n,}   至少n次    {n,m}   n到m次(包含n和m)

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

2:切割             按 \'.\' 字符切   正则表达式为  "\\\\."     \\ 都是成对出现

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

      编号顺序按左括号算

  题意:将一字符串按照叠词切割

import java.util.Scanner; 
public class Main {  
    public static void main(String[] args) { 
      Scanner s = new Scanner(System.in);
      while(s.hasNext()){
          String string = s.nextLine();
          String[] strings = splitDemo(string);
          for (String string2 : strings) {
            System.out.println(string2);
        }
      }
      s.close();
    }
    public static String[] splitDemo(String string){
        String regex = "([a-z])\\\\1+";
        String[] strings = string.split(regex);
        return strings;
        
    }
}
View Code

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

3:替换

  题意:将一字符串中的叠词换成一个单词

  $1  代表前一个正则表达式的第一组

import java.util.Scanner; 
public class Main {  
    public static void main(String[] args) { 
      Scanner s = new Scanner(System.in);
      while(s.hasNext()){
          String string = s.nextLine();
          System.out.println(replaceAllDemo(string));
      }
      s.close();
    }
    public static String replaceAllDemo(String string){
        String string2 = string.replaceAll("([a-z])\\\\1+", "$1");
        return string2;
    }
}
View Code

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

  操作步骤:

    1、将正则表达式封装成对象

    2、让正则对象和要操作的字符串相关联

    3、关联后,获取正则匹配引擎

    4、通过引擎进行所有操作,包括取出

  题意:将一个字符串中单词长度为4的单词取出并给出单词的索引位

      "\\\\b"  代表单词边界符

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            String string = s.nextLine();
            getDemo(string);
        }
        s.close();
    }
    public static void getDemo(String string) {
        String reg = "\\\\b[a-zA-Z]{4}\\\\b";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(string);
        while(m.find()) {
            System.out.println(m.group());
            System.out.println(m.start()+" "+m.end());
        }
    }
}
View Code

 

 

 

  

 

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式