在Java正则表达式中解释量词

在Java正则表达式中解释量词

在Java中,量词是一种特殊字符,允许你指定字符或字符组在正则表达式中可以出现的次数。最常见的量词有:

  • *:出现在它前面的字符或字符集的一个或多个实例。

  • ?:出现在它前面的字符或字符集零次或一次。

  • +:出现在它前面的字符或字符集的一个或多个实例。

  • {n}:特定数量(n个)的出现在它前面的字符或字符集。

  • {n,}:出现在它前面的字符或字符集至少出现n次。

  • {n,m}:出现在它前面的字符或字符集出现n到m次。

量词可以是贪婪的、勉强的或拥有的。与勿扰的量词相反,贪婪的量词试图尽可能少地匹配输入文本。当拥有的量词匹配完整的输入文本时,可能会比量词指示的字母或组的实例少。

量词类型

  • 贪婪量词

  • 勉强量词

  • 拥有量词

贪婪量词

贪婪量词是正则表达式中默认的量词类型。它们试图匹配与模式最长可能匹配的字符串。例如,正则表达式a+将以aaaa的形式匹配字符串aaaa,而不是a。

贪婪量词首先处理整个字符串。在情况下,如果模式不后随完整字符串,算法将消除最后一个字符并重试。直到字符串与模式匹配或没有更多字符可以移除,这个过程将继续进行。

while()

这段Java代码在输入”aaa”中寻找模式”a+”。它找到了这个模式出现的位置,并显示了每个匹配的起始和结束位置。程序输出类似于”Pattern found ranging from 0 to 2″的消息,指示它在输入中找到了模式的位置。

算法

  • 第一步:使用Pattern.compile()方法和模式”a+”编译正则表达式,并将其赋值给变量p。

  • 第二步:通过在模式p上使用matcher()方法,并传入输入字符串”aaa”,生成一个名为m的Matcher对象。

  • 第三步:启动一个while循环来遍历Matcher的匹配项。

  • 第四步:使用Matcher m的find()方法检查是否匹配。

  • 第五步:如果找到匹配项,则在循环内执行代码。

  • 第六步:打印”Pattern found ranging from”和m.start()的结果以及” to “和(m.end()-1)的结果的拼接字符串。

  • 第七步:关闭while循环。

  • 第八步:结束main方法和TLP类。

示例

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

public class TLP
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("a+");

        Matcher m = p.matcher("aaa");

        while (m.find())
            System.out.println("Pattern found ranging from " + m.start() +
                            " to " + (m.end()-1));

    }
}

输出

Pattern found ranging from 0 to 2

不情愿的修饰符

非贪婪修饰符与贪婪修饰符相反。它们试图匹配最短的满足模式的字符串。例如,正则表达式a+?将字符串aaaa匹配为a,而不是aaaa。

while()

该代码创建一个正则表达式模式,它匹配一个或多个a字符,但也允许匹配零个a字符。然后,代码创建一个用于输入字符串”aaa”的匹配器对象。匹配器对象用于在输入字符串中查找模式的所有实例。对于每个模式的出现,代码打印消息”Pattern ranging from start() to end()-1″。匹配器对象的start()和end()方法返回匹配在输入字符串中的开始和结束索引。

算法

  • 步骤1:通过编译正则表达式”a+?”创建一个Pattern对象。

  • 步骤2:通过将输入字符串”aaa”传递给它来创建一个Matcher对象。

  • 步骤3:进入一个循环来查找并打印输入字符串中的匹配项。

  • 步骤4:结果将显示在输入字符串”aaa”中找到的匹配模式的起始和结束索引。

示例

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

public class TLP
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("a+?");

        Matcher m = p.matcher("aaa");

        while (m.find())
            System.out.println("Pattern ranging from " + m.start() +
                            " to " + (m.end()-1));

    }
}

输出

Pattern ranging from 0 to 0
Pattern ranging from 1 to 1
Pattern ranging from 2 to 2

占有性量词

像贪婪量词一样,占有性量词匹配尽可能多的字符。与贪婪量词相反,占有性量词不会尝试从字符串末尾移除字符,如果整个字符串不符合模式,则不会移除,这与贪婪量词相反。

while()

这段代码创建了一个正则表达式模式,用于匹配两个字符c和++的序列。然后,这个示例创建一个匹配器对象,用于输入字符串”ccc”。匹配器对象用于查找输入字符串中模式的所有实例。对于每个模式的出现,代码将打印消息”Pattern ranging from start() to end()-1″。

算法

  • 步骤1:声明名为TLP的主类。

  • 步骤2:通过编译正则表达式”c++”来创建一个Pattern对象。

  • 步骤3:通过将输入字符串”ccc”传递给它来创建一个Matcher对象。

  • 步骤4:进入循环,查找并打印输入字符串中的匹配项。

  • 步骤5:当代码运行时,输入字符串”ccc”将显示匹配模式”c++”的起始和结束索引。

示例

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

public class TLP
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("c++");

        // Making an instance of Matcher class
        Matcher m = p.matcher("ccc");

        while (m.find())
            System.out.println("Pattern ranging from from " + m.start() +
                            " to " + (m.end()-1));
    }
}

输出

Pattern ranging from from 0 to 2

结论

在Java正则表达式中,量词表示字符或字符集在匹配中可以出现的次数。量词有三种变体:占有型、犹豫型和贪婪型。

占有型量词匹配恰好提供的字符数。贪婪型量词会尽可能地匹配尽量多的字符。而犹豫型量词则匹配尽量少的字符。

以下是Java正则表达式中量词的一些示例:

  • a+匹配一个或多个a字符

  • a*匹配零个或多个a字符

  • a?匹配一个a字符或者没有字符

  • a{3}恰好匹配三个a字符

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程