拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 理解Pattern.quote方法

理解Pattern.quote方法

白鹭 - 2021-11-06 2357 0 2

1. 概述

在Java 中使用正则表达式时,有时我们需要

在这个快速教程中,让我们看看如何手动和使用Java 提供Pattern.quote()

2. 不转义元字符

让我们考虑一个包含美元金额列表的字符串:

String dollarAmounts = "$100.25, $100.50, $150.50, $100.50, $100.75";

现在,让我们假设我们需要在其中搜索特定数量的美元。让我们相应地初始化一个正则表达式模式字符串:

String patternStr = "$100.50";

首先,让

public void whenMetacharactersNotEscaped_thenNoMatchesFound() {
 Pattern pattern = Pattern.compile(patternStr);
 Matcher matcher = pattern.matcher(dollarAmounts);
 int matches = 0;
 while (matcher.find()) {
 matches++;
 }
 assertEquals(0, matches);
 }

正如我们所看到的,matcherdollarAmounts$150.50patternStr

您可能应该已经猜到了,我们会在所有正则表达式元字符上面临同样的问题。我们将无法搜索包含插入符号(^) 的数学语句,例如“5^3users\bob

3. 手动忽略元字符

其次,让我们在执行搜索之前

public void whenMetacharactersManuallyEscaped_thenMatchingSuccessful() {
 String metaEscapedPatternStr = "\\Q" + patternStr + "\\E";
 Pattern pattern = Pattern.compile(metaEscapedPatternStr);
 Matcher matcher = pattern.matcher(dollarAmounts);
 int matches = 0;
 while (matcher.find()) {
 matches++;
 }
 assertEquals(2, matches);
 }

这一次,我们

  • 在转义使代码更难以理解的元字符时执行

  • 由于添加了硬编码值,

4. 使用Pattern.quote()

最后,让我们看看在我们的正则表达式中忽略元字符

Java 在它们的Patternquote()

public void whenMetacharactersEscapedUsingPatternQuote_thenMatchingSuccessful() {
 String literalPatternStr = Pattern.quote(patternStr);
 Pattern pattern = Pattern.compile(literalPatternStr);
 Matcher matcher = pattern.matcher(dollarAmounts);
 int matches = 0;
 while (matcher.find()) {
 matches++;
 }
 assertEquals(2, matches);
 }

5. 结论

在本文中,我们研究了如何以文字形式处理正则表达式模式。

我们看到了如何不转义正则表达式元字符未能提供预期的结果,以及如何使用Pattern.quote()


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *