diff --git a/include/boost/regex/v4/cpp_regex_traits.hpp b/include/boost/regex/v4/cpp_regex_traits.hpp index cbd699da..6896e60f 100644 --- a/include/boost/regex/v4/cpp_regex_traits.hpp +++ b/include/boost/regex/v4/cpp_regex_traits.hpp @@ -509,8 +509,10 @@ typename cpp_regex_traits_implementation::string_type case sort_delim: // get a regular sort key, and then truncate everything after the delim: result.assign(this->m_pcollate->transform(p1, p2)); + if(result.size() && (result[0] == m_collate_delim)) + break; std::size_t i; - for(i = 0; i < result.size(); ++i) + for(i = 1; i < result.size(); ++i) { if(result[i] == m_collate_delim) break; diff --git a/src/c_regex_traits.cpp b/src/c_regex_traits.cpp index 5cac4a44..a33f7b17 100644 --- a/src/c_regex_traits.cpp +++ b/src/c_regex_traits.cpp @@ -91,6 +91,8 @@ c_regex_traits::string_type BOOST_REGEX_CALL c_regex_traits::transfo case ::boost::re_detail::sort_delim: // get a regular sort key, and then truncate everything after the delim: result = transform(p1, p2); + if(result.size() && (result[0] == s_delim)) + break; std::size_t i; for(i = 0; i < result.size(); ++i) { diff --git a/src/wc_regex_traits.cpp b/src/wc_regex_traits.cpp index f86c5122..2b3764e3 100644 --- a/src/wc_regex_traits.cpp +++ b/src/wc_regex_traits.cpp @@ -83,6 +83,8 @@ c_regex_traits::string_type BOOST_REGEX_CALL c_regex_traits::t case ::boost::re_detail::sort_delim: // get a regular sort key, and then truncate everything after the delim: result = c_regex_traits::transform(&*result.begin(), &*result.begin() + result.size()); + if(result.size() && (result[0] == s_delim)) + break; std::size_t i; for(i = 0; i < result.size(); ++i) {