Я создаю небольшую функцию, которая способна изменять две строки ниже.
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.
Добавьте границы слов, где это необходимо.
Альтернатива ответу Виктора с использованием просто нег. Предварительный просмотр может быть таким: если перед
highp...стоит слово с одним или несколькими\sмежду ними, используйте отрицание. посмотрите вперед, чтобы проверить, что это не запрещенное слово. В противном случае должно быть только начало строки или граница без слов (без пробелов) — запишите эту часть в первую группу... Например. замените (\b(?!precision\b)\w+\s+|^\s*|\B)highp\s+float на$1lowp float. Это, конечно, менее эффективно, но тоже должно работать.