我有一段c++代码:
std::string s ("%r34 = add i32 %r33, 1n");
std::regex e ("\b(r)([^ ]*)"); // matches words beginning by "r"
std::cout << std::regex_replace (s,e,"r$2");
我得到的输出是:
%r34 = add i32 %r33, 1
我的第一个问题是有一种方法可以删除捕获组$2
中的最后一个字符,以获得所需的输出:
%r3 = add i32 %r3, 1
第二个问题:如何找到以"%"开头的单词?而不是" "如果仍然使用与之前相同的逻辑,下面的行不能工作:
std::regex e ("\b(%)([^ ]*)"); // matches words beginning by "%"
要删除'r'后的第二个数字,可以使用:
\b(r)(\d*)\d
…并替换为:
r$2
Regex demo - c++ demo
如果'r'后面的字符不一定是数字,但您想要排除逗号,则可以使用以下字符:
\b(r)([^\s,]*)[^\s,]
如果只匹配'r'前面有'%',使用:
(^|\s)%r(\d*)\d
用
$1%r$2
Regex demo - c++ demo