google / google/re2j

appendReplacement doesn't throw for invalid replacement groups

Open
#196 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.3k
Forks
165
PR merge metrics
No merged PRs in 30d

Description

`appendReplacement` doesn't throw an exception for invalid replacement groups, which is inconsistent with `java.util.regex`. Is this deliberate, or should the behaviour match `java.util.regex`?

```java
String pattern = "(.*)";
String input = "hello";
{
System.err.println("> re2j");
var p = com.google.re2j.Pattern.compile(pattern);
var m = p.matcher(input);
StringBuilder sb = new StringBuilder();
while (m.find()) {
m.appendReplacement(sb, "$foo");
}
System.err.println(sb);
}
{
System.err.println("> java.util.regex");
var p = java.util.regex.Pattern.compile(pattern);
var m = p.matcher(input);
StringBuilder sb = new StringBuilder();
while (m.find()) {
m.appendReplacement(sb, "$foo");
}
System.err.println(sb);
}
```

```
> re2j
$foo$foo

> java.util.regex
java.lang.IllegalArgumentException: Illegal group reference
at java.base/java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1111)
at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:1041)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.