diff --git a/src/regex.nim b/src/regex.nim index fae7223..7e27612 100644 --- a/src/regex.nim +++ b/src/regex.nim @@ -735,13 +735,17 @@ func endsWith*(s: string, pattern: Regex2): bool {.inline, raises: [].} = debugCheckUtf8(s, pattern) result = false + let binFlag = regexArbitraryBytes in pattern.toRegex.flags var m: RegexMatch2 i = 0 while i < s.len: result = match(s, pattern, m, i) if result: return - s.runeIncAt(i) + if binFlag: + inc i + else: + s.runeIncAt(i) func addsubstr( result: var string, s: string, first, last: int diff --git a/tests/tests2.nim b/tests/tests2.nim index d4af1a1..12affe0 100644 --- a/tests/tests2.nim +++ b/tests/tests2.nim @@ -3154,6 +3154,15 @@ when not defined(js) or NimMajor >= 2: m.groupsCount == 0 check match("\x02\xF8\x95", re2(r"\x{2F895}", flags)) and m.groupsCount == 0 + check startsWith("\xff\xf0", re2(r"\xff", flags)) + check(not startsWith("\xf0\xff", re2(r"\xff", flags))) + check endsWith("\xf0\xff", re2(r"\xff", flags)) + check(not endsWith("\xff\xf0", re2(r"\xff", flags))) + check split("\xf0\xff\xf0", re2(r"\xff", flags)) == @["\xf0", "\xf0"] + check splitIncl("\xf0\xff\xf0", re2(r"(\xff)", flags)) == + @["\xf0", "\xff", "\xf0"] + check contains("\xf0\xff\xf0", re2(r"\xff", flags)) + check(not contains("\xf0\xf0", re2(r"\xff", flags))) test "tarbitrary_bytes_flags": let flags = {regexArbitraryBytes}