From f4ad0da658449033830f5a23906dd0a38942b73b Mon Sep 17 00:00:00 2001 From: Alexandre Kohler <64209066+kwy404@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:32:12 -0300 Subject: [PATCH] Fix lookaround regexes in `String.lastIndexOf` and `replaceLast` (#1908) --- .../src/main/java/org/pkl/core/stdlib/base/StringNodes.java | 2 +- .../src/test/files/LanguageSnippetTests/input/api/string.pkl | 2 ++ .../src/test/files/LanguageSnippetTests/output/api/string.pcf | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkl-core/src/main/java/org/pkl/core/stdlib/base/StringNodes.java b/pkl-core/src/main/java/org/pkl/core/stdlib/base/StringNodes.java index f8af6ea49..5b84e7fe7 100644 --- a/pkl-core/src/main/java/org/pkl/core/stdlib/base/StringNodes.java +++ b/pkl-core/src/main/java/org/pkl/core/stdlib/base/StringNodes.java @@ -1107,7 +1107,7 @@ public final class StringNodes { } while (m.find()); // Reset `m` to the last match before returning (should always be `true` at this point) - return m.region(r.start(), r.end()).lookingAt(); + return m.find(r.start()); } /** diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/api/string.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/api/string.pkl index 7891c869b..0485197b2 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/api/string.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/api/string.pkl @@ -179,6 +179,7 @@ examples { str3.lastIndexOf(Regex("ab")) str3.lastIndexOf(Regex("")) module.catch(() -> str3.lastIndexOf(Regex("b*c"))) + str3.lastIndexOf(Regex("ab(?=y)")) } ["lastIndexOfOrNull()"] { @@ -230,6 +231,7 @@ examples { str6.replaceLast(".", "x") str6.replaceLast(Regex("."), "x") module.catch(() -> str4.replaceLast(Regex("cc"), "$4; no such group")) + str3.replaceLast(Regex("(?<=x)ab"), "-") } ["replaceAllMapped()"] { diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/api/string.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/api/string.pcf index 3c02b73c3..c15d69b67 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/api/string.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/api/string.pcf @@ -144,6 +144,7 @@ examples { 6 9 "String does not contain a match for regex pattern. String : \"abxabyabz\" Pattern: Regex(\"b*c\")" + 3 } ["lastIndexOfOrNull()"] { 6 @@ -184,6 +185,7 @@ examples { "aabb.xaabbcc" "aabb..aabbcx" "Error replacing matches for regex `cc` with `$4; no such group`: `No group 4`" + "abx-yabz" } ["replaceAllMapped()"] { ">>aa<>aa<