8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何忽略正则表达式中变量之前的关键字?

chevydog 2月前

41 0

我试图创建一个函数,该函数能够将精度调制器关键字放在浮点变量前面,而没有这样的关键字,因此它将 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》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 谢谢您的回答!它运行良好!顺便问一下,是否有任何轻量级的 boost regex lib 头文件库变体?

返回
作者最近主题: