我试图创建一个函数,该函数能够将精度调制器关键字放在浮点变量前面,而没有这样的关键字,因此它将 const float x; 转换为 lowp const fl......
我试图创建一个能够
将精度调制器关键字放在浮点变量前面,而没有这样的关键字
因此它转换
const float x;
到
lowp const float x;
但是我想忽略以下情况:
当已经有精度修饰符时: lowp const float x;
当有默认精度调制器时: precision lowp float;
根据我之前的问题 链接 ,这是我的正则表达式:
(\bhighp((?:\s+\w+)*)(float|(?:i|b)?vec[2-4]|mat[2-4](?:x[2-4])?)(*SKIP)(?!)|\bfloat\b)
因此,我只是想忽略浮动之前存在 highp|lowp|mediump 的情况。
我有这个正则表达式命令:
#include <iostream>
#include <string>
#include <boost/regex/v5/regex.hpp>
using namespace boost;
std::string precisionModulation(std::string& shaderSource) {
const regex highpFloatRegex2(R"(highp|lowp|mediump((?:\s+\w+)*)(float)(*SKIP)(?!)|(?=\s+(float)))");
shaderSource = regex_replace(shaderSource, highpFloatRegex2, "lowp");
return shaderSource;
}
int main() {
std::string shaderSource = R"(
float foo1;
highp const float foo1;
precision highp float foo2;
)";
std::cout << "Original Shader Source:\n" << shaderSource << std::endl;
std::string modifiedSource = precisionModulation(shaderSource);
std::cout << "\nModified Shader Source:\n" << modifiedSource << std::endl;
return 0;
}
不幸的是我得到了奇怪的结果:
Original Shader Source:
float foo1;
highp const float foo1;
const highp float foo1;
precision highp float foo2;
Modified Shader Source:
lowp float foo1;
highp const lowp float foo1;
const highp lowp float foo1;
precision highp lowp float foo2;
我也尝试过:
\w*(?<!highp)((?:\s+\w+)*)\s+float
如何忽略正则表达式中变量之前的关键字?
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!
帖子版权声明
1、本帖标题:如何忽略正则表达式中变量之前的关键字? 本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com
除非注明,本帖由chevydog 在本站《regex》 版块原创发布,
转载请注明出处!