正则表达式替换: 到":"等

Dom*_*ger 4 c++ regex boost ascii ncr

我有一堆像以下一样的字符串:

"Hello, here's a test colon:. Here's a test semi-colon&#59;"
Run Code Online (Sandbox Code Playgroud)

我想替换它

"Hello, here's a test colon:. Here's a test semi-colon;"
Run Code Online (Sandbox Code Playgroud)

等等所有可打印的ASCII值.

目前我正在使用boost::regex_search匹配&#(\d+);,在我依次处理每个匹配时构建一个字符串(包括追加自我找到的上一个匹配以来没有匹配的子字符串).

谁能想到更好的方法呢?我对非正则表达式方法持开放态度,但在这种情况下,正则表达式似乎是一种合理的方法.

谢谢,

大教堂

MSa*_*ers 9

使用正则表达式的一大优势是处理棘手的情况,例如&实体替换不是迭代的,这只是一个步骤.正则表达式也相当有效:两个主角是固定的,所以它会很快跳过任何不开头的东西&#.最后,正则表达式解决方案是未来维护者没有太多惊喜的解决方案.

我说正则表达式是正确的选择.

它是最好的正则表达式吗?你知道你需要两个数字,如果你有3个数字,第一个将是1.打印ASCII毕竟是 -~.出于这个原因,你可以考虑&#1?\d\d;.

至于替换内容,我将使用为boost :: regex :: replace描述基本算法:

For each match // Using regex_iterator<>
    Print the prefix of the match
    Remove the first 2 and last character of the match (&#;)
    lexical_cast the result to int, then truncate to char and append.

Print the suffix of the last match.
Run Code Online (Sandbox Code Playgroud)