Предполагая, что 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"
Так как это не имеет особого смысла, вы можете объяснить, что фактическая цель этого регулярного выражения ,
Если STARTER и ENDER содержат специальные символы, замена не будет работать правильно. –
Каковы содержимое 'STARTER' и' ENDER', точно? Я уверен, что регулярное выражение, которое вы создаете здесь, не может соответствовать ни одной из строк примера, потому что ни одна из них не содержит литеральную точку, которая является единственной вещью, которая ''. '' Будет соответствовать. Кроме того, регулярные выражения Java не используют разделители, такие как PHP, поэтому '#' также отбрасывают двигатель. –