Skip to content

Commit

Permalink
Merge pull request #369 from blackwhale/master
Browse files Browse the repository at this point in the history
fix for a fix for character classes in std.regex
  • Loading branch information
WalterBright committed Dec 13, 2011
2 parents f703904 + 834d865 commit 9714043
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions std/regex.d
Expand Up @@ -1521,7 +1521,8 @@ struct Parser(R, bool CTFE=false)
last = parseControlCode();
state = State.Char;
break;
case '[',']','\\','^','$','.','|','?',','
case '[',']','\\','^','$','.','|','?',',','-',';',':'
,'#','&','%','/','<','>','`'
,'*','+','(',')','{','}':
last = current;
state = State.Char;
Expand Down Expand Up @@ -1624,7 +1625,8 @@ struct Parser(R, bool CTFE=false)
case 'v':
end = '\v';
break;
case '[',']','\\','^','$','.','|','?',','
case '[',']','\\','^','$','.','|','?',',','-',';',':'
,'#','&','%','/','<','>','`'
,'*','+','(',')','{','}':
end = current;
break;
Expand Down Expand Up @@ -6435,20 +6437,20 @@ public template ctRegex(alias pattern, alias flags=[])
+/

public auto match(R, RegEx)(R input, RegEx re)
if(is(RegEx == Regex!(BasicElementOf!R)))
if(isSomeString!R && is(RegEx == Regex!(BasicElementOf!R)))
{
return RegexMatch!(Unqual!(typeof(input)),ThompsonMatcher)(re, input);
}

///ditto
public auto match(R, String)(R input, String re)
if(isSomeString!String)
if(isSomeString!R && isSomeString!String)
{
return RegexMatch!(Unqual!(typeof(input)),ThompsonMatcher)(regex(re), input);
}

public auto match(R, RegEx)(R input, RegEx re)
if(is(RegEx == StaticRegex!(BasicElementOf!R)))
if(isSomeString!R && is(RegEx == StaticRegex!(BasicElementOf!R)))
{
return RegexMatch!(Unqual!(typeof(input)),BacktrackingMatcher!true)(re, input);
}
Expand All @@ -6471,20 +6473,20 @@ public auto match(R, RegEx)(R input, RegEx re)
+/
public auto bmatch(R, RegEx)(R input, RegEx re)
if(is(RegEx == Regex!(BasicElementOf!R)))
if(isSomeString!R && is(RegEx == Regex!(BasicElementOf!R)))
{
return RegexMatch!(Unqual!(typeof(input)), BacktrackingMatcher!false)(re, input);
}

///ditto
public auto bmatch(R, String)(R input, String re)
if(isSomeString!String)
if(isSomeString!R && isSomeString!String)
{
return RegexMatch!(Unqual!(typeof(input)), BacktrackingMatcher!false)(regex(re), input);
}

public auto bmatch(R, RegEx)(R input, RegEx re)
if(is(RegEx == StaticRegex!(BasicElementOf!R)))
if(isSomeString!R && is(RegEx == StaticRegex!(BasicElementOf!R)))
{
return RegexMatch!(Unqual!(typeof(input)),BacktrackingMatcher!true)(re, input);
}
Expand Down Expand Up @@ -7389,6 +7391,15 @@ else
assert(collectException(
regex(r"^(import|file|binary|config)\s+([^\(]+)\(?([^\)]*)\)?\s*$")
) is null);
foreach(ch; ['^','$','.','|','?',',','-',';',':'
,'#','&','%','/','<','>','`'
,'*','+','(',')','{','}'])
{
assert(match(to!string(ch),regex(`[\`~ch~`]`)));
assert(!match(to!string(ch),regex(`[^\`~ch~`]`)));
if(ch != '-') //'--' is an operator
assert(match(to!string(ch),regex(`[\`~ch~`-\`~ch~`]`)));
}
}
test_body!bmatch();
test_body!match();
Expand Down

0 comments on commit 9714043

Please sign in to comment.