30-May-2013 10:49, Timothee Cour пишет:
ok, here it is:
https://github.com/timotheecour/dtools/blob/master/dtools/util/util.d#L78
simplified implementation and added missing escape symbols. Any symbol
missing?
I was basing myself based on http://dlang.org/phobos/std_regex.html,
table entry '\c where c is one of', but that was incomplete. I'm also
noting that table entry 'any character except' is also incomplete.
One thing missing that '.' that should become '\.'.
> Technically any working "escapeRegex" would also function as a valid
"escapeRegexReplace", although it might be slightly faster to have a
specialised one.
not sure, because they escape differently (\$ vs $$).
shall i do a pull request for std.regex?
Yes, please. It's was a blind spot for long time. Strictly speaking I
think that a generic escaping routine would work:
auto escape(S1, S2, C)(S1 src, S2 escapables, C escape='\\')
if(isSomeString!S1 && isSomeString!S2 && isSomeChar!C)
{
....
}
Do we have something like this in std.string?
Then all we need is a convenience wrapper in std.regex?
BTW unescape is as important.
On Wed, May 29, 2013 at 8:32 PM, Diggory <digg...@googlemail.com
<mailto:digg...@googlemail.com>> wrote:
On Wednesday, 29 May 2013 at 23:33:30 UTC, timotheecour wrote:
something like this, which we should have in std.regex:
string escapeRegex(string a){
import std.string;
enum transTable = ['[' : `\[`, '|' : `\|`, '*': `\*`,
'+': `\+`, '?': `\?`, '(': `\(`, ')': `\)`];
return translate(a, transTable);
}
string escapeRegexReplace(string a){
import std.string;
// enum transTable = ['$' : `$$`, '\\' : `\\`];
enum transTable = ['$' : `$$`];
return translate(a, transTable);
}
unittest{
string a=`asdf(def[ghi]+*|)`;
assert(match(a,regex(__escapeRegex(a))).hit==a);
string b=`$aa\/$ $$#@$\0$1#$@%#@%=+_`;
auto
s=replace(a,regex(escapeRegex(__a)),escapeRegexReplace(b));
assert(s==b);
}
That would be good (although you missed a few :P)
Technically any working "escapeRegex" would also function as a valid
"escapeRegexReplace", although it might be slightly faster to have a
specialised one.
--
Dmitry Olshansky