Я создаю небольшую функцию, которая способна изменять две строки ниже.
precision highp float;
highp float intensity;
на это:
precision highp float;
lowp float intensity;
Поэтому практически я не хочу изменять модификатор точности по умолчанию. Я также хотел бы принять во внимание, что если между точностью и высоким значением есть пробелы, например:
precision /*more white spaces*/ highp float;
Я хотел написать \s+ за пределами регулярного выражения.
((?<!\bprecision\s+)(highp\s+float))
но, насколько я знаю, Boost Negative Look Beyond не поддерживает это, и поэтому он выдает мне ошибку во время выполнения.
Каким может быть решение?
Вы можете использовать
\bprecision\s+highp\s+float(*SKIP)(?!)|highp\s+float
Посмотрите демонстрацию регулярных выражений .
Идея состоит в том, чтобы сопоставить нежелательную часть строки, пропустить ее и только затем сопоставить то, что вам нужно в других контекстах.
Подробности
\bprecision\s+highp\s+float(*SKIP)(?!)
— соответствует, а затем пропускает следующее:
\b
- граница словаprecision\s+highp\s+float
- precision highp float
с любым количеством пробелов между словами(*SKIP)(?!)
- исключить совпадение из буфера памяти совпадений и начать поиск совпадения с конечной позиции неудачи|
- илиhighp\s+float
- highp
+ один или несколько пробелов + float
.Также узнайте больше о (*SKIP) и поддержке других глаголов PCRE в Boost.
Обратите внимание, что (*FAIL)
= (?!)
.
Вы также можете найти \bprecision\s+highp\s+float(*SKIP)(?!)|highp(?=\s+float)
и заменить его просто lowp
.
Добавьте границы слов, где это необходимо.