Я хотел бы удалить все лишние пробелы в файле, включая разрывы строк, НО только если этот разрыв строки НЕ является концом препроцессорная линия. Команды препроцессора такие же, как в C, хотя язык файла SQF, но это не имеет значения в этом контексте. Я делаю это на Java, но по соображениям удобочитаемости я размещаю свое регулярное выражение здесь в простой форме, а не как строки Java.RegEx - соответствует всем пробелам (включая разрывы строк), которые НЕ являются концом строки препроцессора
Это пример того, что файл может выглядеть следующим образом:
#include "someFile.ext"
#define IDD idd_interact
#define ELEMENTS_COUNT 2
#define FRAME_X ((1 - FRAME_W)/2)
#define FRAME_Y ((1 - FRAME_H)/2)
_aNumber = 0;
if (_someVar == someGlobalVar) then {
};
Я пробовал с этим одним: \\s+(?!#)
, но результат таков:
#include "someFile.ext"
#define IDD idd_interact
#define ELEMENTS_COUNT 2
#define FRAME_X ((1 - FRAME_W)/2)
#define FRAME_Y ((1 - FRAME_H)/2) _aNumber = 0; if (_someVar == someGlobalVar) then { };
После последнего препроцессора line, прерывание строки также удаляется. Но я хочу, чтобы остаться, я хочу, результат похож на это:
#include "someFile.ext"
#define IDD idd_interact
#define ELEMENTS_COUNT 2
#define FRAME_X ((1 - FRAME_W)/2)
#define FRAME_Y ((1 - FRAME_H)/2)
_aNumber = 0; if (_someVar == someGlobalVar) then { };
Я попробовал, что с отрицательным просмотром назад, но я только мог придумать недействительны регулярные выражения (quatifiers и lookarounds, кажется, не любит друг другой):
(?<!(#[^\s]+\s+[^\s]+[^\n]*))[\s]
Теперь, я все еще довольно новый для регулярных выражений, поэтому я довольно много в конце моего знания здесь. Есть ли решение? Я был бы очень благодарен!
спасибо! Я минимизирую файлы SQF, а не файлы Java. Реализация этого в Java, и я знаю, что пробелы внутри строки, не беспокойтесь :). Дело в том, что нужно удалить все пробелы, включая разрывы строк, если они не являются концом строки препроцессора. Под «пробелами» я подразумеваю все, включая разрывы строк. Извините, я не совсем понял, что Java считает '\ n' в' \ s'. – jaySon
Пространство и новая линия занимают по одному байту, в чем же дело? – Tomalak
Речь идет о том, чтобы сделать код менее читаемым. Я также уменьшаю имена переменных, поэтому в основном цель состоит в том, чтобы запутать код без введения «фиктивного кода». – jaySon