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); }
正如我们所看到的,matcher
dollarAmounts
$150.50
patternStr
您可能应该已经猜到了,我们会在所有正则表达式元字符上面临同样的问题。我们将无法搜索包含插入符号(^) 的数学语句,例如“5^3
users\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 在它们的Pattern
quote()
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 评论