2012-04-12 2 views
-3

У меня есть простой регулярное выражение [.]:

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

Результат:

Строка, которая содержит

STARTER an exemple ENDER 

матчи, но:

STARTER an (exemple) ENDER 

не совпадает.

Почему персонажи ), ( и $ исключенные из класса . регулярных выражений? Как я могу заставить его принять любого персонажа?

+0

Если STARTER и ENDER содержат специальные символы, замена не будет работать правильно. –

+5

Каковы содержимое 'STARTER' и' ENDER', точно? Я уверен, что регулярное выражение, которое вы создаете здесь, не может соответствовать ни одной из строк примера, потому что ни одна из них не содержит литеральную точку, которая является единственной вещью, которая ''. '' Будет соответствовать. Кроме того, регулярные выражения Java не используют разделители, такие как PHP, поэтому '#' также отбрасывают двигатель. –

ответ

2

Предполагая, что STARTER и ENDER должны быть символьные строки, а не регулярные выражения себя, и что ваша цель состоит в том, чтобы соответствовать строке, которая начинается с 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 accept any char (кроме, может быть, \n) без [].

Смежные вопросы