On Sunday, 23 November 2025 at 12:43:05 UTC, Jabba Laci wrote:
I'm working on an Advent of Code problem (2015, Day 5, Part 2), and my code doesn't work in D. In Python I get the correct result.Here is a string: const s = "xdwduffwgcptfwad";The instructions says: "It contains a pair of any two letters that appears at least twice in the string without overlapping, like xyxy (xy) or aabcdefgaa (aa), but not like aaa (aa, but it overlaps)."Here, "fw" appears twice. My D code: auto m1 = matchFirst(s, regex(r"(..).*\1"));returns an empty m1 object. What am I doing wrong? The same regex works in Python.
Author of std.regex here. Indeed it’s unfortunate that the main engine doesn’t support all cases of backreferences. It’s been a while since I touched std, but the fix should be mostly strightforward - use simple backtracking for this cases. std.regex has backtracking but I think it’s also augmented with certain tricks to avoid exponential behaviour. Those need to be reverted, then std.regex could just select simple backtracking for patterns that have backreferences.
— Dmitry Olshansky
