-3

我有一个简单的正则表达式:

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

结果 :

一个字符串,其中包含

STARTER an exemple ENDER 

匹配但是:

STARTER an (exemple) ENDER

不匹配。

为什么字符),($从正则表达式类中排除.?我怎样才能让它接受任何字符?

4

2 回答 2

2

.(dot) 不是一个正则表达式类,它是一个特殊的符号,它只有在外面有它的特殊含义[]

点接受任何字符(可能除外\n)w/o []

于 2012-04-12T08:07:07.390 回答
2

假设STARTERandENDER应该是文字字符串,而不是正则表达式本身,并且您的目标是匹配一个以 开头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"

由于这没有多大意义,您可能想解释一下您对这个正则表达式的实际目标是什么。

于 2012-04-12T08:36:21.047 回答