首页 > 其他分享 >正则表达式

正则表达式

时间:2024-08-19 19:07:10浏览次数:5  
标签:字符 匹配 方括号 正则表达式 Pattern txt

正则表达式

Java正则表达式是Java语言中用于匹配字符串中字符组合的模式。Java提供了java.util.regex包,其中包含了用于正则表达式操作的主要类:

  1. Pattern
    • 表示正则表达式的编译表示形式。Pattern类是不可变的,所以可以安全地共享。
  2. Matcher
    • 是正则表达式引擎的结果,用于与输入字符串进行匹配。
  3. PatternSyntaxException
    • 表示正则表达式模式中的语法错误。

字符通配符

字符通配符是一种特殊的字符,通常用于文件搜索或字符串匹配操作中,代表一个或多个任意字符。在不同的上下文中,字符通配符可能有不同的表现形式和用途。以下是一些常见的字符通配符及其用法:

  1. 星号(*)
    • 在许多编程语言和操作系统的文件搜索中,星号代表任意数量的任意字符。例如,在文件系统中搜索*.txt会匹配任何以.txt结尾的文件。
  2. 问号(?)
    • 问号代表单个任意字符。例如,在文件系统中搜索?.txt会匹配任何以单个字符后跟.txt结尾的文件,如a.txtb.txt等。
  3. 方括号([ ])
    • 方括号用于定义一个字符集合,匹配方括号内的任意一个字符。例如,[abc].txt会匹配a.txtb.txtc.txt
  4. 范围(a-z、A-Z、0-9)
    • 在方括号内,可以使用范围来表示一系列连续的字符。例如,[a-z]代表任意一个小写字母,[0-9]代表任意一个数字。
  5. 脱字符(^)
    • 当脱字符出现在方括号内的开始位置时,它表示不在方括号内的任何字符。例如,[^abc].txt会匹配不是a.txtb.txtc.txt的任何文件。
  6. 连字符(-)
    • 在方括号内,连字符用于表示一个字符范围。例如,[a-z]表示从az的任意小写字母。
  7. 反斜杠(\)
    • 在正则表达式中,反斜杠用作转义字符,用于转义那些在正则表达式中有特殊意义的字符,或者表示特殊序列。例如,要匹配文字中的星号*,可以使用\*
  8. 点(.)
    • 在某些上下文中,点字符可以作为通配符,代表任意单个字符。但在正则表达式中,点(.)需要被转义(即\.)以表示文字中的点字符,因为未转义的点代表任意单个字符。

次数通配符

次数通配符用于指定正则表达式中前一个字符或组的出现次数。以下是一些常见的次数通配符:

  1. \* (星号):
    • 表示前面的元素可以出现零次或多次。例如,a*可以匹配字符串""(空字符串)或"aaa"。
  2. + (加号):
    • 表示前面的元素至少出现一次或多次。例如,a+可以匹配"a"或"aaa",但不能匹配空字符串。
  3. ? (问号):
    • 表示前面的元素可以出现零次或一次。例如,a?可以匹配"a"或""(空字符串)。
  4. {n}
    • 表示前面的元素恰好出现n次。例如,a{3}可以匹配"aaa"。
  5. {n,}
    • 表示前面的元素至少出现n次,没有上限。例如,a{2,}可以匹配"aa"或"aaa",但不能匹配"a"。
  6. {n,m}
    • 表示前面的元素至少出现n次,最多出现m次。例如,a{2,3}可以匹配"aa"或"aaa",但不能匹配"a"或"aaaa"。
  7. \*? (非贪婪星号):
    • 懒惰版本,尽可能少地匹配字符。例如,在字符串"aaa"中使用(a*)(a*?)都会匹配"aaa",但(a*)会捕获整个字符串,而(a*?)只会捕获一个"a"。
  8. +? (非贪婪加号):
    • 懒惰版本,尽可能少地匹配字符,至少出现一次。
  9. ?? (非贪婪问号):
    • 懒惰版本,尽可能少地匹配字符,只匹配一次或零次。

以下是一些使用次数通配符的正则表达式示例:

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

public class RegexQuantifierExample {
    public static void main(String[] args) {
        // 正则表达式示例
        String regex1 = "a*"; // 匹配任意数量的'a'
        String regex2 = "a+"; // 至少匹配一个'a'
        String regex3 = "a?"; // 匹配零个或一个'a'
        String regex4 = "a{3}"; // 恰好匹配三个'a'
        String regex5 = "a{2,}"; // 至少匹配两个'a'
        String regex6 = "a{2,3}"; // 匹配两个或三个'a'
        String regex7 = "a*?"; // 懒惰的星号,尽可能少地匹配'a'

        // 测试字符串
        String testString = "aaaa";

        // 编译正则表达式并测试匹配
        Pattern pattern1 = Pattern.compile(regex1);
        Pattern pattern2 = Pattern.compile(regex2);
        Pattern pattern3 = Pattern.compile(regex3);
        Pattern pattern4 = Pattern.compile(regex4);
        Pattern pattern5 = Pattern.compile(regex5);
        Pattern pattern6 = Pattern.compile(regex6);
        Pattern pattern7 = Pattern.compile(regex7);

        Matcher matcher1 = pattern1.matcher(testString);
        Matcher matcher2 = pattern2.matcher(testString);
        Matcher matcher3 = pattern3.matcher(testString);
        Matcher matcher4 = pattern4.matcher(testString);
        Matcher matcher5 = pattern5.matcher(testString);
        Matcher matcher6 = pattern6.matcher(testString);
        Matcher matcher7 = pattern7.matcher(testString);

        System.out.println("Regex1 (a*): " + matcher1.matches()); // true
        System.out.println("Regex2 (a+): " + matcher2.matches()); // true
        System.out.println("Regex3 (a?): " + matcher3.matches()); // true
        System.out.println("Regex4 (a{3}): " + matcher4.matches()); // true
        System.out.println("Regex5 (a{2,}): " + matcher5.matches()); // true
        System.out.println("Regex6 (a{2,3}): " + matcher6.matches()); // true
        System.out.println("Regex7 (a*?): " + matcher7.find()); // true, 懒惰匹配,只匹配一个'a'
    }
}

在这个示例中,我们定义了多个正则表达式,并使用它们来匹配一个测试字符串"aaaa"。每个正则表达式都使用了不同的次数通配符来定义匹配规则。然后,我们编译了这些正则表达式,使用Matcher对象来测试它们是否与测试字符串匹配,并打印了结果。

其他通配符

  1. 圆点 . (在正则表达式中):
    • 在正则表达式中,未转义的圆点表示匹配任意单个字符(除了换行符)。
  2. 单引号 ' (在某些脚本语言中):
    • 在某些脚本语言中,如Bash,单引号用于定义字面量字符串,其中的特殊字符不会被解释。
  3. 双引号 " (在某些脚本语言中):
    • 与单引号相对,双引号内的变量和转义字符会被解释。
  4. 波浪线 ~ (在版本控制中):
    • 在Git等版本控制系统中,波浪线用于表示某个提交的父提交。
  5. 美元符号 $ (在正则表达式和变量替换中):
    • 在正则表达式中,$表示字符串的末尾。在某些脚本语言中,如Bash,$用于变量替换。
  6. 反斜杠 \ (在正则表达式和转义序列中):
    • 在正则表达式中,反斜杠用作转义字符,用于转义那些在正则表达式中有特殊意义的字符。
  7. 方括号 [ ] (在正则表达式中):
    • 用于定义字符集,匹配方括号内的任意一个字符。
  8. 圆括号 ( ) (在正则表达式中):
    • 用于分组,可以对正则表达式的部分进行组合,以便应用量词或提取匹配的子字符串。
  9. 垂直线 | (在正则表达式中):
    • 表示逻辑“或”,用于匹配选项中的任意一个。
  10. 脱字符 ^ (在正则表达式和行首标记中):
    • 在正则表达式中,当位于方括号[ ]内时,表示不在方括号内的任何字符;当位于圆括号( )内或行首时,表示字符串的开头。
  11. 花括花 }{ (在大括号扩展中):
    • 在某些脚本语言中,如Bash,花括号用于扩展变量或参数。
  12. 星号 \* (在文件系统搜索中):
    • 在文件系统搜索中,星号通常表示匹配任意数量的任意字符。
  13. 问号 ? (在文件系统搜索中):
    • 在文件系统搜索中,问号通常表示匹配单个任意字符。
  14. 方括号 [!...] (在文件系统搜索中):
    • 在某些系统中,方括号加感叹号表示排除方括号内的字符。

标签:字符,匹配,方括号,正则表达式,Pattern,txt
From: https://www.cnblogs.com/jmy3/p/18367908

相关文章

  • JavaScript-正则表达式入门指南-全-
    JavaScript正则表达式入门指南(全)原文:IntroducingRegularExpressions协议:CCBY-NC-SA4.0一、正则表达式简介为了开始介绍正则表达式,我将从一个例子开始。这是一个你已经经历了几百次的问题。当您在线输入客户数据时,许多web表单会要求您提供电子邮件地址。为了避免输入......
  • 正则表达式
    一、正则特殊符号:1、;作用:命令的分隔符,前面的命令失败或者正确都会继续执行案例1:命令的拼接[root@web01~]#ll;mkdirweb;cdweb;pwdtotal4-rw-r--r--1rootroot1000Nov2322:57test.zip/root/web案例2:命令执行错误不影响后续命令执行[root@web01~]#lll;mkdir......
  • 在Delphi中使用正则表达式校验身份证号
    以下内容转自:https://my.oschina.net/ousinka/blog/3048132如何定义身份证号的正则表达式呢?1、省份编码[1-9]\d{5}2、年份(18|19|20)?\d{2}3、月份为1,3,5,7,8,10,12,天数范围为01-31,匹配MMDD的正则表达式为:(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])4、月份为4,6,9......
  • 正则表达式高级
    正则表达式的三种模式【贪婪、勉强、侵占】假定要分析的字符串是xfooxxxxxxfoo模式.*foo(贪婪模式):模式分为子模式p1(.*)和子模式p2(foo)两个部分.其中p1中的量词匹配方式使用默认方式(贪婪型)。匹配开始时,吃入所有字符xfooxxxxxx去匹配子模式p1。匹配成功,但这样以来就没......
  • 提高效率:Linux 正则表达式实用技巧
    目录前言匹配符号用法讲解“.”用法[]用法“*”用法“.*”用法“\?”用法“\+”用法“\\{n\\}”用法\\{m,n\\}用法锚点符号“^”用法“$”用法“^$”用法或|用法前言在Linux系统中,正则表达式(RegularExpressions,简称regex)是一个强大的工具,广泛应......
  • Linux Shell编程--正则表达式、grep、sed、awk
    前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除!一、正则表达式1、正则表达式定义1.1、简介正则表达式是一种强大的文本模式匹配工具,用于搜索、替换或分割字符串。在Shell脚本中,正则表达式通常与grep、sed和awk等工具一起使用。1.2、层次分类基......
  • 【Regex】正则表达式详解:从基础到高级应用(保姆篇)
    文章目录正则表达式详解:从基础到高级应用一、正则表达式基础1.什么是正则表达式?2.基本组成部分二、正则表达式的常用模式1.字符匹配2.量词3.位置符号4.分组和捕获三、正则表达式的高级应用1.断言(Assertions)2.贪婪与非贪婪匹配四、正则表达式在不同编程语言中......
  • sed 命令与正则表达式
    sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都会被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果打印到屏幕上。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓......
  • Linux shell脚本案例:使用正则表达式匹配目录并定时删除日期早于当前系统日期的所有目
    实现每周三和每周日执行清理/NFS目录的任务,你可以使用shell脚本结合cron定时任务。下面是一个示例脚本,它会删除/NFS目录下所有名称形如XBK_FULL_YYYYMMDDHHMMSS和XBK_INCR_YYYYMMDDHHMMSS的目录,其中日期早于当前系统日期。步骤1:创建Shell脚本创建脚本......
  • 通配符和正则表达式区别
    通配符和正则表达式区别通配符是shell自带的用于匹配文件名的工具,多用在文件名上,比如查找find,ls,cp等等。正则表达式则需要特定命令的支持才可以使用,如:grep、sed和awk(号称Linux三剑客)、vi/vim、perl等,这些都是处理文本的工具。其次,shell对通配符与正则表达式的处理也有不同,“......