我想刪除文件中的所有不必要的空白,包括換行符結尾的所有空格(包括換行符),但前提是該行突破不是一個結束預處理器行。儘管文件的語言是SQF,但預處理器命令與C中的相同,但在此上下文中並不重要。我在Java中做這些東西,但出於可讀性的原因,我將這個正則表達式放在這裏,而不是Java字符串。正則表達式 - 匹配這不是一個預處理線
這是一個什麼樣的文件可能看起來像一個例子:
#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 { };
最後一個預處理後行,換行符也被刪除。但我想,要留,我想結果看起來像這樣:
#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 { };
我試過用負回顧後,但我只能拿出無效正則表達式(表量和lookarounds似乎並不喜歡對方其他):
(?<!(#[^\s]+\s+[^\s]+[^\n]*))[\s]
現在,我仍然是相當新的正則表達式,所以我幾乎在我的知識結束了。有沒有解決方案?我會非常感激!
非常感謝您!我正在縮小SQF文件,而不是Java文件。這是Java的實現,我知道字符串內部的空格,不用擔心:)。重點是刪除所有空格,包括換行符,除非它們是預處理器行的結尾。 「空格」是指包括換行符在內的所有內容。對不起,我不清楚,Java計算'\ n'到'\ s'中。 – jaySon
一個空格和換行各佔據一個字節,有什麼大不了的? – Tomalak
這是關於使代碼不易讀。我也在縮小變量名稱,所以基本上目標是在不引入「虛擬代碼」的情況下對代碼進行混淆。 – jaySon