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

正则表达式

时间:2024-08-05 13:05:47浏览次数:11  
标签:字符 匹配 正则表达式 通配符 次数 字符串

正则表达式

一.字符通配符

字符通配符是一种在多种编程语言和工具中广泛使用的特殊字符或字符序列,它们用于匹配或比较字符串时表示一组字符的模式。字符通配符可以实现模糊匹配,使得字符串处理更加灵活和高效。在Java中,字符通配符的使用主要体现在以下几个方面:

1. 正则表达式中的通配符

在Java中,正则表达式提供了一种强大的字符串处理机制,其中包含了多种通配符用于模式匹配。常见的正则表达式通配符包括:

  • .(点):匹配除换行符之外的任何单个字符。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • [ ]:字符集合,匹配方括号中的任意字符。例如,[abc] 匹配 "a"、"b" 或 "c"。
  • [^ ]:否定字符集合,匹配不在方括号中的任意字符。例如,[^abc] 匹配除了 "a"、"b" 或 "c" 之外的任意字符。
  • {n}:n 是一个非负整数,匹配确定的 n 次。例如,o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 "o"。
  • {n,}:n 是一个非负整数,至少匹配 n 次。例如,o{2,} 不能匹配 "Bob" 中的 "o",但能匹配 "foooood" 中的所有 "o"。
  • {n,m}:m 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 "fooooood" 中的前三个 "o"。

2. 泛型编程中的通配符

在Java的泛型编程中,通配符(wildcard)用于表示不确定的类型。泛型通配符主要有以下几种形式:

  • ?:无界通配符,表示未知的类型。例如,List<?> 表示列表的元素类型未知。
  • ? extends T:有界通配符,表示未知的类型是T或T的子类。例如,List<? extends Number> 表示列表的元素类型是Number或其子类。
  • ? super T:有界通配符,表示未知的类型是T或T的父类。例如,List<? super Integer> 表示列表的元素类型是Integer或其父类(如Number或Object)。

3. 字符串匹配算法中的通配符

在一些特定的字符串匹配算法中,如通配符匹配算法(Wildcard Matching),也会使用到通配符。这些通配符通常包括:

  • *:匹配任意数量的字符(包括零个字符)。
  • ?:匹配任意单个字符。

这些通配符在算法中用于实现更复杂的字符串匹配逻辑,如模糊搜索、路径匹配等。

总结

字符通配符在Java中是一种非常有用的工具,它们可以在正则表达式、泛型编程以及特定的字符串匹配算法中发挥重要作用。掌握字符通配符的使用可以帮助我们更灵活地处理字符串和类型,提高编程效率和代码的可读性。

二.次数通配符

在编程和正则表达式中,次数通配符用于指定某个字符或子表达式在字符串中出现的次数。这些通配符提供了灵活的匹配模式,使得可以匹配具有不同长度或重复模式的字符串。以下是一些常见的次数通配符及其用法:

1. 正则表达式中的次数通配符

在正则表达式中,次数通配符用于指定前面的字符或子表达式重复的次数。常见的次数通配符包括:

  • *:匹配前面的子表达式零次或多次。例如,ab*c 可以匹配 "ac"、"abc"、"abbc"、"abbbc" 等。
  • +:匹配前面的子表达式一次或多次。例如,ab+c 可以匹配 "abc"、"abbc"、"abbbc" 等,但不能匹配 "ac"。
  • ?:匹配前面的子表达式零次或一次。例如,ab?c 可以匹配 "ac" 或 "abc"。
  • {n}:n 是一个非负整数,匹配确定的 n 次。例如,o{2} 匹配 "food" 中的两个 "o"。
  • {n,}:n 是一个非负整数,至少匹配 n 次。例如,o{2,} 匹配 "foooood" 中的前两个及之后的 "o"。
  • {n,m}:m 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 匹配 "fooooood" 中的前三个 "o"。

2. 字符串匹配算法中的次数通配符

在某些字符串匹配算法中,次数通配符的概念可能以不同的形式出现,但它们的核心目的是相似的,即允许某种程度的模糊匹配。然而,这些算法中的具体实现和通配符可能因算法而异。

3. 注意事项

  • 次数通配符的使用需要谨慎,因为它们可能会导致匹配结果过于宽泛,从而包含不期望的字符串。
  • 在使用次数通配符时,应考虑正则表达式的贪婪模式和非贪婪模式。贪婪模式会尽可能多地匹配字符,而非贪婪模式(通过在通配符后添加 ? 实现)会尽可能少地匹配字符。
  • 不同的编程语言和正则表达式引擎可能支持不同的通配符和语法,因此在具体使用时需要参考相应语言的文档。

4. 示例

假设我们有一个字符串 "apple123banana456cherry",并希望使用正则表达式匹配其中的数字部分。我们可以使用 \d+ 作为正则表达式,其中 \d 匹配任意一个数字,+ 表示前面的 \d 至少出现一次。这样,正则表达式 \d+ 就会匹配到字符串中的 "123"、"456" 等数字部分。

总之,次数通配符在编程和正则表达式中扮演着重要的角色,它们提供了灵活的匹配模式,使得可以更加精确地匹配具有特定重复模式的字符串。

三.其他通配符

在编程和文本处理中,除了常见的次数通配符(如正则表达式中的*+?{n}{n,}{n,m})外,还有其他类型的通配符。这些通配符在不同的上下文和工具中有不同的用途和表现形式。以下是一些常见的其他通配符:

1. 字符集合通配符

  • [ ]:在正则表达式中,方括号用于定义字符集合。匹配方括号内的任意字符。例如,[abc] 匹配 "a"、"b" 或 "c"。
  • [^ ]:否定字符集合,匹配不在方括号中的任意字符。例如,[^abc] 匹配除了 "a"、"b" 或 "c" 之外的任意字符。

2. 泛型编程中的通配符

在Java等支持泛型的编程语言中,通配符(?)用于表示不确定的类型。泛型通配符主要有以下几种形式:

  • ?:无界通配符,表示未知的类型。例如,List<?> 表示列表的元素类型未知。
  • ? extends T:有界通配符(上界通配符),表示未知的类型是T或T的子类。例如,List<? extends Number> 表示列表的元素类型是Number或其子类。
  • ? super T:有界通配符(下界通配符),表示未知的类型是T或T的父类。例如,List<? super Integer> 表示列表的元素类型是Integer或其父类(如Number或Object)。

3. 字符串匹配算法中的通配符

在一些特定的字符串匹配算法中,如通配符匹配算法(Wildcard Matching),也会使用到通配符。这些通配符通常包括:

  • *:匹配任意数量的字符(包括零个字符)。这种通配符在文件路径匹配、URL匹配等场景中非常常见。
  • ?:匹配任意单个字符。这种通配符在模糊搜索、正则表达式简化等场景中可能会用到。

4. 其他编程语言或工具中的通配符

  • 在Shell脚本中,* 通常用于匹配任意数量的字符(包括零个字符),用于文件名扩展等场景。
  • 在一些数据库查询语言中,如SQL,%_ 分别用作通配符,其中 % 匹配任意数量的字符,_ 匹配任意单个字符。

注意事项

  • 通配符的使用需要根据具体的上下文和工具来确定其含义和用法。
  • 在使用通配符时,应注意其可能导致的模糊匹配问题,确保匹配结果符合预期。
  • 不同的编程语言和工具可能支持不同的通配符和语法,因此在具体使用时需要参考相应语言的文档或工具的使用说明。

总之,通配符在编程和文本处理中是一种非常有用的工具,它们提供了灵活的匹配模式,使得可以更加精确地处理字符串和类型。然而,在使用通配符时需要注意其可能的模糊性和不同上下文中的差异。

标签:字符,匹配,正则表达式,通配符,次数,字符串
From: https://www.cnblogs.com/yhy373286277/p/18343011

相关文章

  • Python中使用正则表达式
    摘要:正则表达式,又称为规则表达式,它不是某种编程语言所特有的,而是计算机科学的一个概念,通常被用来检索和替换某些规则的文本。一.正则表达式的语法①行定位符行定位符就是用来描述字符串的边界。"^"表示行的开始,"$"表示行的结束。^tm  #tmequalTomorrowMoon可以......
  • 正则表达式:有没有一种方法可以提取单引号之间的所有子字符串,而不提取撇号之间的子字符
    基本上,我有一个包含英语语句的数据集。有些语句包含前导/尾随标点符号,所以我想清理和标准化它们。标准化的标准是删除所有前导/尾随标点符号,语句的第一个字符大写,并且语句以句点结尾。我有一个函数可以执行此操作并将其应用于数据集中的每一行。如果有帮助的话,这里是一个代码......
  • 零基础学python 之 第十九讲 正则表达式
    当你开始学习Python编程时,正则表达式是一项非常强大的工具,用于处理文本数据中的模式匹配和搜索。本篇博客将带你从零开始学习如何在Python中使用正则表达式。1.什么是正则表达式?正则表达式(RegularExpression)是用于描述字符串模式的一种工具,可以用来匹配、查找、替换符合特......
  • 【Python正则-驯化】一文学会通过Python中的正则表达式提取文本数据中的电话号码:re
    【Python正则-驯化】一文学会通过Python中的正则表达式提取文本数据中的电话号码:re 本次修炼方法请往下查看......
  • 【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的网址
    【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的网址 本次修炼方法请往下查看......
  • 正则表达式解释尴尬的科学记数法
    好的,我正在处理这个ENDF数据,请参阅此处有时,在文件中,它们很可能是我见过的最烦人的科学计数法浮点数编码1那里经常使用类似1.234e-3的东西来代替1.234-3(省略“e”)。现在我看到了一个库,它只是将-更改为e-或||......
  • MySQL正则表达式
    004-正则表达式MySQL利用REGEXP命令提供给用户扩展的正则表达式功能,熟悉掌握REGEXP的功能可以使模式匹配工作事半功倍。表达式  说明^   字符串开始处进行匹配(以“后面字符串”开始匹配字符)$   字符串结尾处进行匹配(以“前面字符串”结尾匹配字符).   ......
  • Java正则表达式
    基本规则要点Test //131123456781[3-9]\\d{9} Stringregex1="1[3-9]\\d{9}"; System.out.println("13154654456".matches(regex1));//true System.out.println("03154654456".matches(regex1));//false System.out.printl......
  • 正则表达式小记
    转义字符在正则表达式中,某些字符具有特殊的含义,它们被称为元字符或特殊字符。当你希望这些特殊字符按照字面意义匹配文本时,就需要使用转义字符(通常是反斜杠\)来“取消”它们的特殊含义。以下是正则表达式中需要转义的常见特殊字符:反斜杠用于转义其他特殊字符或创建预定义字符......
  • Python正则表达式匹配数字的第一次重复
    示例:For0123123123,1应匹配,因为第二个1出现在任何其他数字重复之前。For01234554321,5应该匹配,因为第二个5出现在任何其他数字的重复之前。我尝试过的一些正则表达式:......