2012-04-12 120 views
-3

我有一個簡單的regex []:

String expr = "#^" + STARTER + "[.]" + ENDER + "$#"; 
c = c.replaceAll(expr, STARTER + REPLACEMENT + ENDER); 

結果:

含有

STARTER an exemple ENDER 
的字符串

的比賽,但:

STARTER an (exemple) ENDER 

不匹配。

爲什麼從.正則表達式類中排除字符),($? 我如何讓它接受任何角色?

+0

如果STARTER和ENDER包含特殊符號,替換將無法正常工作。 – 2012-04-12 08:25:15

+5

「STARTER」和「ENDER」的內容究竟是什麼?我很確定你在這裏構造的正則表達式不能匹配任何一個示例字符串,因爲它們都不包含字面點,這是'[。]'匹配的唯一字符串。另外,Java正則表達式不使用分隔符,比如PHP,所以'#'也會拋出引擎。 – 2012-04-12 08:27:29

回答

2

假設STARTERENDER都應該是字符串,而不是正則表達式本身,那你的目標是匹配與STARTER開頭的字符串,用ENDER結束,可以包含任何(除換行符)在兩者之間,你可以使用

String expr = "^" + Pattern.quote(STARTER) + ".*" + Pattern.quote(ENDER) + "$"; 

這意味着每個字符串只能有一個匹配項。

所以,如果STARTER == "Start"ENDER == "End"REPLACEMENT == "Replace",該replaceAll()調用將執行以下操作:

"Start foobar End"  --> "StartReplaceEnd" 
"StartEnd"    --> "StartReplaceEnd" 
" Start foobar End"  --> " Start foobar End" 
"Start foo\nbar End" --> "Start foo\nbar End" 
"foo Start bar End baz" --> "foo Start bar End baz" 
"Start End\nStart End" --> "Start End\nStart End" 

因爲這並沒有太大的意義,你可能要解釋你對這個表達式的實際目標是什麼。

2

.(點)不是正則表達式類,它是一個特殊的符號,它只有在[]之外才有其特殊含義。

Dot接受任何字符(除了可能\n)W/O []