正则表达式的语法

正则表达式语法简介

 正则表达式是独立于任何语言的,虽然不同的
语言中其语法略有不同。
 正则表达式的语法可以分为
• 特殊字符
• 边界匹配符
• 逻辑操作符
• 量词等
 这些基本的语法规则合成使用,共同构成了正
则表达式强大的表示和匹配功能
 一般字符的语法在前一节已经介绍过(例如字符i)

特殊字符的表达

在这里插入图片描述
 例如,如果我们要查找一个字符串,这个字符
串中至少包含两行(两行可以不相邻),前面
一行中存在两个制表符,它们中间仅仅隔一数
字,后面一行中至少有一个制表符,则正则表
达式可以这样写:
• String regexString = “.\t\d\t.\n.\t.
(其中的.表示任意多个非换行字符)
• 注意:正则表达式原文是“.
\t\d\t.\n.\t.*” ,
双反斜杠中前一反斜杠是Java对反斜杠的转
义。

边界匹配符

在这里插入图片描述
 例如,如果我们要判断一个完整文本中是否存在完
整的一行"This is a complete line",且行中没有其它
任何字符,则可以如下的正则表达式:
• String regexString = “^This is a complete line$”
• 其中的 ^ 和 $ 界定了行的起始和终止,中间的
信息必须完整匹配才可以。

逻辑操作符

在这里插入图片描述
 例如,假设十六进制的表示字符是由数字和A-F这6个大写字母构成。我们知道一个字节可以用 2位的16进制表示,下面这个正则表达式要判断一个字节转换成十六进制之后的表示是不是正确:
• String regexString = “[0-9A-F][0-9A-F]”
 字符串“ AE”, “30”, “6G”, “7E0”, “0A”匹配这个模式的结果分别是:T, T, F, F, T。其实这个需求还有更简单的实现方法,我们将在量词中介绍。

量词

量词 描述了一个模式怎样吸收输入的文本:
 贪婪型:量词是贪婪的,除非有别的设定。否则,贪婪型模式就要尽可能地发现更多的匹配。
 勉强型:用问号指定。这个量词需要满足匹配的最少字符数。
 占有型:目前,只有Java语言可用,属于Java特殊语法,主要用途是防止失配时回溯。在简单的正则表达式中很少使用。
在这里插入图片描述
 例如,判断一个字节的十六进制表示是否正确可以用下面的正则表达式:
• String regexString = “[0-9A-F]{2}”
 判断一个字符串表示的数值是不是一个(0, 1亿)
之间的整数,可用:
• String regexString = “[1-9]//d{0,7}”

Java中的正则表达式(Regular Expression)是基于Perl 5的正则表达式语法,但也有一些Java特有的扩展。下面是一些Java正则表达式的基本语法和元素:

  1. 字符类(Character Classes):

    • .:匹配任何字符(除了换行符)。
    • [abc]:匹配括号中的任一字符。
    • [^abc]:匹配不在括号中的任一字符。
    • [a-z]:匹配任何小写字母。
    • [A-Z]:匹配任何大写字母。
    • [0-9]:匹配任何数字。
    • \d:等同于[0-9],匹配任何数字。
    • \D:匹配任何非数字字符。
    • \s:匹配任何空白字符,包括空格、制表符、换页符等。
    • \S:匹配任何非空白字符。
    • \w:匹配任何单词字符,等同于[a-zA-Z_0-9]
    • \W:匹配任何非单词字符。
  2. 预定义字符类(Predefined Character Classes):

    • \t:匹配制表符。
    • \n:匹配换行符。
    • \r:匹配回车符。
    • \f:匹配换页符。
    • \e:匹配转义字符。
  3. 边界匹配器(Boundary Matchers):

    • ^:行的开头。
    • $:行的结尾。
    • \b:单词边界。
    • \B:非单词边界。
    • \A:输入的开头。
    • \G:上一个匹配的结尾。
    • \Z:输入的结尾,但如果是换行符,则在换行符前匹配。
    • \z:输入的结尾。
  4. 数量词(Quantifiers):

    • X?:X出现一次或零次。
    • X*:X出现零次或多次。
    • X+:X出现一次或多次。
    • X{n}:X恰好出现n次。
    • X{n,}:X出现n次或多次。
    • X{n,m}:X出现至少n次,但不超过m次。
  5. 逻辑运算符(Logical Operators):

    • XY:X后跟Y。
    • X|Y:X或Y。
    • (X):捕获组。
  6. 特殊构造(Special Constructs):

    • (?:X):非捕获组。
    • (?=X):零宽度正预测先行断言。
    • (?!X):零宽度负预测先行断言。
    • (?<=X):零宽度正回顾后发断言。
    • (?<!X):零宽度负回顾后发断言。
    • (?>X):独立非捕获组(也称为“原子组”)。
    • \Q...\E:在…\E之间的任何字符都被视为字面字符。
  7. 反斜杠、转义和引用(Backslashes, Escapes, and Quoting):

    • \:用作转义字符,例如\n代表换行符。
    • \Q...\E:使\之后的字符失去特殊含义。
    • \\:匹配\字符本身。

在Java中,你可以使用java.util.regex包中的PatternMatcher类来处理正则表达式。例如:

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "Hello, World! 123";
        String regex = "\\d+"; // 匹配一个或多个数字

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            System.out.println("Found match: " + matcher.group());
        }
    }
}

在这个例子中,我们使用了正则表达式\\d+来匹配文本中的一个或多个数字,并打印出所有匹配的结果。注意,在Java字符串中,\是一个转义字符,所以当我们想要表示正则表达式中的\d时,我们需要使用\\d

  • 16
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静Yu

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值