Boost正则表达式不替换正则表达式网站上正确替换的表达式
Boost regex not replacing expression that replaces correctly on regex websites
我试图用boost::regex替换regex,但似乎不起作用。
下面是正则表达式:
(\w+,\d+,\d+,\d+tscriptt)(.+)(#)(.+)(t\d+(,\d+)?(,\d+)?,{)
格式化程序:
$1"$2"$3"$4"$5
代码:(getInput()返回一个字符串,其中的内容应该匹配)
std::string &Preprocessor::preprocess()
{
std::string &tempString = getInput();
boost::regex scriptRegexFullName;
const char *scriptRegexFullNameReplace = "$1"$2"$3"$4"$5";
scriptRegexFullName.assign("(\w+,\d+,\d+,\d+tscriptt)(.+)(#)(.+)(t\d+(,\d+)?(,\d+)?,{)");
tempString = boost::regex_replace(tempString, scriptRegexFullName, scriptRegexFullNameReplace, boost::match_default);
return tempString;
}
当我把以下测试用例放在这个网站上时:
alberta,246,82,3 script Marinheiro#bra2 100,{
brasilis,316,57,3 script Marinheiro#bra1 100,{
brasilis,155,165,3 script Orientação divina#bra1 858,{
网站的输出是正确的:
alberta,246,82,3 script "Marinheiro"#"bra2" 100,{
brasilis,316,57,3 script "Marinheiro"#"bra1" 100,{
brasilis,155,165,3 script "Orientação divina"#"bra1" 858,{
但使用boost::regex,输出为:
alberta,246,82,3 script "Marinheiro#bra2 100,{
brasilis,316,57,3 script Marinheiro#bra1 100,{
brasilis,155,165,3 script Orientação divina#bra1 858,{
谁知道我做错了什么?
谢谢你的帮助。
问题来自你的第一个(.+)
,它很贪婪,可能会抓住所有他能抓住的东西,直到主题字符串的最后一个#
。
你可以试试这个模式:
const char *scriptRegexFullNameReplace = "$1"$2"#"$3"$4";
scriptRegexFullName.assign("(\p{L}+,\d+,\d+,\d+\s+script\s+)([^#]+)#(\S+)(\s+\d+,\{)");
注意事项:
- 花括号的转义可能是非种子的,请尝试将其删除
p{L}
代表任何unicode字母,但如果有问题,您可以尝试用[^,]
替换它- 您可以用
++
替换所有+
以获得更多性能(不允许回溯) - 不需要捕捉尖锐的东西来代替它,这就是为什么图案只有四个捕捉组的原因
- 与其使用
(.+?)
(带有惰性量词的点),不如使用具有缩减字符类的贪婪量词:[^#]
,它将匹配所有字符,直到第一个#
相关文章:
- C++正则表达式替换整个单词
- 用回调函数替换C++正则表达式
- 将一个特定字符替换为正则表达式匹配中的另一个字符
- 对 std::string 执行正则表达式搜索和替换
- Eclipse IDE,正则表达式搜索和替换
- 使用提升C++通过正则表达式替换字符串
- 正则表达式用模式替换模式
- C++11正则表达式:在替换字符串中捕获组后的数字
- C++正则表达式库,替换为函数指针
- 在Qt Creator中使用正则表达式在多个文件中查找和替换
- Visual Studio正则表达式替换
- C++正则表达式替换第一个匹配项
- 使用Boost替换正则表达式
- 使用正则表达式替换匹配项
- 有没有办法在一次迭代中进行任意数量的正则表达式替换
- 使用正则表达式替换 1 次迭代中的所有匹配项
- 如何使用增强正则表达式替换方法
- Boost正则表达式不替换正则表达式网站上正确替换的表达式
- 是否有任何C/ c++编辑器支持替换正则表达式?
- 在替换正则表达式中向匹配的数字添加一