2016-08-30 52 views
0

當我從文字正則表達式構建模式並從文件中讀取正則表達式時,爲什麼我沒有得到相同的行爲? (?十一)REGEX中字符的替代表示

String regex = "(?xi)(title)[\\.:;](.*) \043 Title property"; 
Pattern pattern = Pattern.compile(regex); 
System.out.println(pattern); 
// will print: 

(標題):;](。*)#Title屬性

這個表達式工作然而,當我試圖從文件中讀取我的正則表達式遇到問題。 '\ 043'不會被替換爲正確的形式。爲什麼這樣?

我試圖避免使用文字'#'字符符號,從而使用和替代表示,因爲我的代碼中的其他衝突。

+0

該文件字面上包含'\ 043'?在源代碼中,這被編譯器取代。從運行時的任何位置讀取它時都不會有這種行爲。 –

+0

你爲什麼要避免#? –

+0

如果你不想使用'#',那麼使用'\ u0023'。請提供[MCVE(最小完整可驗證示例)](http://stackoverflow.com/help/mcve)。我懷疑你的輸入中沒有'#'。 –

回答

0
assertEquals(1, "\043".length()); 
assertEquals("#", "\043"); 

...都通過。

\043被Java編譯器變成一個字符(「#」)。

如果你讀包含文件:

\043 

...成字符串,然後:

assertEquals("\\043", stringFromFile); 

...會通過。如果您想在字符串中使用文字\,則需要使用另一個\進行轉義。