digitalmars.D.learn - Why doesn't this work...Struct std.regex.Captures
- WhatMeForget (67/67) Jul 08 2017 I was playing around with regex
- ketmar (2/2) Jul 08 2017 WhatMeForget wrote:
I was playing around with regex import std.regex; import std.stdio; void main() { string[] fileNames = [ "011_bad.txt", "01_01_pass", "90_pass", "_bad" ]; auto reg = regex(r"^\d{2}_"); foreach (name; fileNames) { auto c = matchFirst(name, reg); //writeln(c.hit); // Slice of matched portion of input. if (c.empty) writeln(name, " is not the form we are looking for"); else writeln(name, " is a winner"); } } All is good: 011_bad.txt is not the form we are looking for 01_01_pass is a winner 90_pass is a winner _bad is not the form we are looking for but then I uncommented the writeln(c.hit); above and all hell breaks loose: core.exception.AssertError /usr/include/dmd/phobos/std/regex/package.d(559): Assertion failure ---------------- ??:? _d_assertp [0x8124936] ??:? pure nothrow property nogc trusted immutable(char)[] std.regex.Captures!(immutable(char)[], uint).Captures.hit() [0x81190d6] ??:? _Dmain [0x80ff351] ??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFNlZv [0x8125bbe] ??:? scope void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x8125b10] ??:? scope void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() [0x8125b7e] ??:? scope void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x8125b10] ??:? _d_run_main [0x8125aa8] ??:? main [0x8122ff3] ??:? __libc_start_main [0xb74dc275] I got inspiration from the following "live" code at at .../captures.html. I inserted a writeln(c.hit) and here it worked! import std.range.primitives : popFrontN; assert(c.pre == " "); // Part of input preceding match assert(c.hit == c[0] && c.hit == "abc"); // The whole match writeln("My Addition ",c.hit); writeln(c[2]); // "b" writeln(c.front); // "abc" c.popFront(); writeln(c.front); // "a" writeln(c.back); // "c" c.popBack(); writeln(c.back); // "b" and it worked fine: My Addition abc b abc a c b What gives? Thanks.
Jul 08 2017
WhatMeForget wrote: c.hit is undefined when `c.empty` is `true`.
Jul 08 2017