解释 Java 正则表达式中的量词
Java 中的量词是特殊字符,可用于指定某个字符或字符组在正则表达式中出现的次数。最常见的量词是:
*:一个或多个出现在它之前的字符或字符集的实例。
?:它之前的字符或字符集,零个或一个实例。
+:一个或多个出现在它之前的字符或字符集的实例。
{n}:具体来说,出现在它之前的字符或字符集的 n 个实例。
{n,}:出现在它之前的字符或字符集至少出现 n 次。
{n,m}:出现在它之前的字符或字符集的 n 到 m 个实例。
量词可以是贪婪的、勉强的或占有性的。与不情愿量词相反,贪婪量词会尝试匹配尽可能少的输入文本。当所有格量词匹配完整的输入文本时,它匹配的前面字母或组的实例可能比量词指示的要少。
量词类型
贪婪量词
不情愿量词
所有格量词
贪婪量词
贪婪量词是正则表达式中的默认量词类型。它们尝试匹配与模式匹配的最长字符串。例如,正则表达式 a+ 将字符串 aaaa 匹配为 aaaa,而不是 a。
贪婪量词首先处理整个字符串。如果模式后面不是完整的字符串,算法将删除最后一个字符并重试。直到字符串与模式匹配或没有其他字符需要删除,此过程将继续进行。
while()
此 Java 代码在输入"aaa"中查找模式"a+"。它找到此模式出现的位置并显示每个匹配的起始和结束位置。程序输出一条消息,如"发现模式范围从 0 到 2",表明它在输入中找到模式的位置。
算法
步骤 1:使用 Pattern.compile() 方法对模式"a+"编译正则表达式模式,并将其分配给变量 p。
步骤 2:通过在模式 p 上使用 matcher() 方法并传递输入字符串"aaa",生成名为 m 的 Matcher 对象。
步骤 3:启动一个 while 循环,以迭代 Matcher 的匹配项。
步骤 4:使用 Matcher m 的 find() 方法检查匹配项。
步骤 5:如果找到匹配项,则执行循环内的代码。
步骤 6:打印"发现模式范围从"与m.start() 和 " to " 和 (m.end()-1)。
步骤 7:关闭 while 循环。
步骤 8:结束 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"创建一个匹配器对象。匹配器对象用于在输入字符串中查找模式的所有实例。对于模式的每次出现,代码都会打印消息"模式范围从 start() 到 end()-1"。 matcher 对象的 start() 和 end() 方法返回输入字符串中匹配的起始和终止索引。
算法
步骤 1:通过编译正则表达式"a+?"创建一个 Pattern 对象。
步骤 2:通过将输入字符串"aaa"传递给 Matcher 对象来创建一个 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"创建一个匹配器对象。匹配器对象用于在输入字符串中查找模式的所有实例。对于模式的每次出现,代码都会打印消息"模式范围从 start() 到 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 字符
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

