Steve Teale wrote: > KennyTM~ Wrote: > >> On Nov 15, 10 14:58, Steve Teale wrote: >> > Some time ago in phobos2, the following: >> > >> > RegExp wsr = RegExp("(\\s+)"); >> > int p = wsr.find("<thingie att1=\"whatever\">"); >> > writefln("%s|%s|%s %d",wsr.pre(), wsr.match(1), wsr.post(), p); >> > >> > would print: >> > >> > <thingie| |att1="whatever"> 7 >> > >> > Now it prints >> > >> > <thingie| |att1="whatever"> 1 >> > >> > The new return value is pretty useless, equivalent to returning a bool. >> > It seems to me that the 'find' verb's subject should be the string, not >> > the RegExp object. >> > >> > This looks like a case of the implementation being changed to match the >> > documentation, when in fact it would have been better to change the >> > documentation to match the implementation. >> > >> > Either that, or RegExp should have an indexOf method that behaves like >> > string.indexOf. >> > >> > Steve >> > >> >> Isn't std.regexp replaced by std.regex? Why are both of them still in >> Phobos 2? >> >> (oh, and std.regex is missing a documented .index (= .src_start) >> property.) > > I guess std.regexp is still there because not all of us necessarily want > to iterate a range to simply find out the position of the first whitespace > in a string. Part of the expressiveness of languages is that one should be > free to use the style that suits, and not have to read the documentation > every time one uses it. Give me options in Phobos by all means. > > D2 is not going to succeed by forcing its users to use unfamiliar, and > maybe not yet very fashionable constructions. > > I'm pissed off because this change broke a lot of my code, which I had not > used for some time, but now have a paying customer for. The code did not > break because of D language evolution. It broke because somebody decided > they did not like the style of std.regexp. All I wanted was plain old > regular expressions, similar to JavaScript, or PHP, or other popular > languages, and std.regexp did that pretty well at one time. > > Steve
I'm pretty sure that can be filed as a bug. The behavior is still documented as returning index of match, and the standalone std.regexp.find works that way. Patch: @@ -1045,7 +1045,7 @@ { int i = test(string); if (i) - i = pmatch[0].rm_so != 0; + i = pmatch[0].rm_so; else i = -1; // no match return i;