Is std.regex.match completely broken?

Jacob Carlborg doob at me.com
Tue Mar 1 08:10:45 PST 2011


On 2011-03-01 14:03, Dmitry Olshansky wrote:
> On 28.02.2011 22:37, Jacob Carlborg wrote:
>> The following code will result in an AssertError or RangeError when run.
>>
>> import std.regex;
>> import std.stdio;
>>
>> void main ()
>> {
>> auto m = "abc".match(`a(\w)b`);
>>
>> writeln(m.hit); // AssertError in regex.d:1795
>> writeln(m.captures); // RangeError in regex.d:1719
>> }
>>
>> Should I report this as a bug?
>>
> Well, there won't be a match.
> If you meant "abc".match(`a(\w)c`) then it works for me.
> At the bottom of it all, I also was sort of surprised to get an Assert
> and not an Exception, but it's the way it works with ranges in Phobos.
> So you should check m.empty before use.

That seems quite strange, to design an API like that. Why doesn't "hit" 
just returns an empty string and "captures" an empty range.

> P.S. I'm in the process of patching in lookahead regexes, I think I can
> get them fairly soon. As for lookbehind, well, that's would be somewhat
> harder it seems.

Sounds good.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list