-3

I have a simple regex :

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

Result :

A string which contains

STARTER an exemple ENDER 

matches but :

STARTER an (exemple) ENDER

doesn't match.

Why are the characters ), ( and $ excluded from the . regex class? How can I make it accept any character?

4

2 に答える 2

2

.(ドット)は正規表現クラスではなく、特別な記号であり、の外側でのみ特別な意味を持ちます[]

(多分を除いて\n)文字を受け入れない[]でください。

于 2012-04-12T08:07:07.390 に答える
2

とが正規表現自体ではなくリテラル文字列であるSTARTERと仮定し、目標は で始まり、で終わり、その間に何か (改行を除く) を含む可能性のある文字列に一致させることであると仮定すると、次を使用できます。ENDERSTARTERENDER

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

これは、文字列ごとに 1 つの一致しか存在できないことを意味します。

したがって、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 に答える