正则表达式

正则表达式是一种强大的文本处理工具,用于匹配字符串中字符的模式。它由一系列字符组成,这些字符可以是普通字符(如字母a到z)、特殊字符(如星号*或问号?)或二者的组合。正则表达式可以用来搜索、编辑或处理文本。

  1. 普通字符:字母a到z、数字0到9以及标点符号都是普通字符。它们在正则表达式中表示它们自己。
  2. 特殊字符 :有一些字符具有特殊含义,如. * ? [ ] ( ) { } ^ $ | \等。
  3. 点号( .****):匹配任意单个字符(除了换行符)。
  4. 星号( *****) :表示前面的元素可以出现零次或多次。例如,a*匹配零个或多个'a'。
  5. 加号( +****) :表示前面的元素至少出现一次。例如,a+匹配一个或多个'a'。
  6. 问号( ?****) :表示前面的元素可以出现零次或一次。例如,a?匹配零个或一个'a'。
  7. 方括号( []****) :匹配括号内的任意一个字符。例如,[abc]匹配'a'、'b'或'c'。
  8. 反斜杠( *)*:用作转义字符,去除特殊字符的特殊含义,或表示特殊序列。
  9. 圆括号( ()****):定义一个组,可以对匹配的字符串进行操作,如提取。
  10. 花括号( {}****) :指定前面元素的出现次数。例如,a{3}匹配三个'a',a{2,}匹配两个或更多个'a'。
  11. 竖线( |****) :表示逻辑"或"。例如,cat|dog匹配"cat"或"dog"。
  12. 脱字符( ^****) :在方括号内使用时,表示非。例如,[^abc]匹配除了'a'、'b'、'c'之外的任意字符。在圆括号内使用时,表示行的开始。
  13. 美元符号( $****):表示字符串的结束。
  14. 点星( .*****):是一个危险的组合,因为它可以匹配任意长度的任意字符,包括零个字符。这可能会导致无限循环。
  15. 正向前瞻( (?=...)****):正向肯定查找,表示匹配某个字符串之后的内容,但不对这部分字符串进行消费。
  16. 负向前瞻( (?!...)****):正向否定查找,表示匹配不是紧跟着某个字符串的内容。

例1:^A-Za-z\\d+$

  1. ^:脱字符,表示匹配字符串的开始位置。
  2. [A-Za-z]:字符类,匹配任意单个字母(大小写不限)。
  3. \\d:转义序列,表示匹配任意一个数字。在字符串中,\d 相当于 [0-9]。
  4. +:量词,表示前面的元素至少出现一次。在这里,它与 \d 结合,表示至少有一个数字。
  5. $:脱字符,表示匹配字符串的结束位置。

即:以字母开头,后面跟着至少一个数字

例2:^\\dA-Za-z*$

  1. ^:脱字符,表示匹配字符串的开始位置。
  2. \d:转义序列,表示匹配任意一个数字(等价于 [0-9])。
  3. [A-Za-z]*:字符类加上星号(*)作为量词,表示匹配任意数量的字母(包括零个)。这里的字母包括所有的小写字母(a 到 z)和所有的大写字母(A 到 Z)。
  4. $:脱字符,表示匹配字符串的结束位置。

即:输入的字符串以数字开头,后面可以跟任意数量的字母

例3:^A-Za-z(?=.*A-Za-z)(?=.*\\d)A-Za-z\\\\d*$

  1. ^:脱字符,表示匹配字符串的开始位置。
  2. [A-Za-z]:字符类,匹配任意单个字母(大小写不限)。
  3. (?=.*[A-Za-z]):正向前瞻断言,用于确保字符串中至少包含一个字母。这个断言不会消耗任何字符,它只是向前查看字符串,以确保某个条件为真。
  4. (?=.*\d):另一个正向前瞻断言,用于确保字符串中至少包含一个数字。
  5. [A-Za-z\d]*:字符类,匹配任意数量的字母或数字(包括零个)。这里的字符集包括了所有的大小写字母和数字。
  6. $:脱字符,表示匹配字符串的结束位置。

即:输入的字符串至少包含一个字母和一个数字,并且以字母开头

代码实现:

java 复制代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String p1="^[A-Za-z]\\d+$";
        String p2="^\\d[A-Za-z]*$";
        String p3="^[A-Za-z](?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*$";
        int n=sc.nextInt();
        sc.nextLine();
        for(int i=0;i<n;i++){
            String str=sc.nextLine();
            if(str.matches(p1)){
                System.out.println("standard");
            }
            else if(str.matches(p2)){
                System.out.println("special");
            }
            else if(str.matches(p3)){
                System.out.println("mix");
            }
            else{
                System.out.println("invalid");
            }
        }
    }
}

使用str.matches(p1)方法。

近日总结:做好自己,勇往直前,要相信,事与愿违的背后有更好的在等待自己。

相关推荐
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
进击的荆棘2 小时前
MySQL——库的操作
数据库·mysql
2601_967980112 小时前
“小程序·云开发”上线 助力开发者的高效利器
数据库·存储管理·小程序云开发·云函数·开发者工具
zhangjw342 小时前
1-9 SELECT 查询基础:where、group by、having、order by、limit offset
数据库·postgresql·pg数据库
计算机毕设定制辅导-无忧学长2 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
唐老板3 小时前
Postgres 慢查询,先取证再动手
数据库·ai编程
笃行3509 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员11 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范
SelectDB16 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶16 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql