diff --git a/src/regex_impl.cc b/src/regex_impl.cc index a6e4a3dc..ea8b22e5 100644 --- a/src/regex_impl.cc +++ b/src/regex_impl.cc @@ -307,7 +307,7 @@ private: Vector> ctypes; while (m_pos != m_regex.end() and *m_pos != ']') { - const auto cp = *m_pos++; + auto cp = *m_pos++; if (cp == '-') { ranges.push_back({ '-', '-' }); @@ -335,6 +335,13 @@ private: ++m_pos; continue; } + else // its just an escaped character + { + + if (++m_pos == m_regex.end()) + break; + cp = *m_pos; + } } CharRange range = { cp, cp }; @@ -1223,6 +1230,12 @@ auto test_regex = UnitTest{[]{ TestVM vm{R"(Foo(?i)f[oB]+)"}; kak_assert(vm.exec("FooFOoBb")); } + + { + TestVM vm{R"([^\]]+)"}; + kak_assert(not vm.exec("a]c")); + kak_assert(vm.exec("abc")); + } }}; }