Повысьте регулярное выражение, как перевести такую ​​функцию PHP unescape в C ++? - PullRequest
1 голос
/ 24 июля 2011

Когда мне нужно было создать CMS на PHP Я создал простую unescape html функцию, которая выглядела так:

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

Как перевести ее в C ++ с помощью Boost.Regex

1 Ответ

1 голос
/ 24 июля 2011

Я думаю, это будет выглядеть примерно так:

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);
}

(обратите внимание, что я не проверял это!)

...