diff --git a/std/regex/internal/parser.d b/std/regex/internal/parser.d index a03f915dc4b..b6fb2ad6eac 100644 --- a/std/regex/internal/parser.d +++ b/std/regex/internal/parser.d @@ -432,6 +432,20 @@ struct Parser(R) next(); switch(current) { + case '#': + nesting--; + fixupStack.pop(); + for(;;) + { + if(!next()) + error("Unexpected end of pattern"); + if(current == ')') + { + next(); + break; + } + } + break; case ':': put(Bytecode(IR.Nop, 0)); next(); diff --git a/std/regex/internal/tests.d b/std/regex/internal/tests.d index 9121749ca0d..d3502f7d253 100644 --- a/std/regex/internal/tests.d +++ b/std/regex/internal/tests.d @@ -1003,3 +1003,10 @@ unittest auto rx = regex("[c d]", "x"); assert("a b".matchFirst(rx)); } + +unittest +{ + auto r = regex("(?# comment)abc(?# comment2)"); + assert("abc".matchFirst(r)); + assertThrown(regex("(?#...")); +}