从正则表达式捕获组获取子字符串



我有一段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

最新更新