Boost regexp如何将这样的PHP非转义函数转换为c++


Boost regexp how to translate such PHP unescape function to C++?

当我必须在PHP中创建CMS时,我创建了一个简单的unescape html函数,看起来像这样:

function unescape($s) {
    $s= preg_replace('/%u(....)/', '&#x$1;', $s);
    $s= preg_replace('/%(..)/', '&#x$1;', $s);
return $s;
}

如何使用Boost.Regex将其翻译成c++ ?

我猜它看起来有点像这样:

std::string unescape(const std::string s)
{
  std::string temp = boost::regex_replace(s, "%u(....)", "&#x$1;", boost::match_default);
  temp = boost::regex_replace(temp, "%u(..)", "&#x$1;", boost::match_default);
  return temp;
}

但是我认为. (DOT)应该只匹配十六进制值,在这种情况下,我会选择这样的东西:

std::string unescape(const std::string s)
{
  return boost::regex_replace(s, "%u([0-9a-fA-F]{2}|[0-9a-fA-F]{4})", "&#x$1;",
                              boost::match_default);
}

(注意我没有测试这个!)