Вы можете использовать
.replaceAll("\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}")
Или, если совпадения могут охватывать несколько строк, добавить модификатор (?s)
:
.replaceAll("(?s)\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}")
См. Демонстрационную версию regex .
Подробности
\B"\b
- "
, который находится в начале строки или предшествует несловесному символу, и за ним следует слово char (.*?)
- группа 1: любые ноль или более символов, кроме символов перевода строки, как можно меньше \b"\B
- "
то есть либо в конце строки, либо с последующим введением не-слова char, и перед ним стоит слово char.
Замена - обратная косая черта sh ("\\\\"
, примечание Двойной литерал backsla sh необходим в замещающей части регулярного выражения для вставки реального литерала backsla sh, поскольку backsla sh - это специальный символ в шаблоне замены), q{
, значение Group1 (* 1031) *) и }
.
См. Java демо :
String s = "This is my \"te\n\nst\" case\nwith lines for \"tes\"t\"ing\" with regex\nBut as he said \"It could be an arbitray ammount of words\"";
System.out.println(s.replaceAll("\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}"));
Выход:
This is my "te
st" case
with lines for \q{tes"t"ing} with regex
But as he said \q{It could be an arbitray ammount of words}
Примечание: * 10 45 *
Если вам также необходимо сопоставить две последовательные двойные кавычки, которые не предшествуют или не сопровождаются символами слова, вы можете изменить приведенное выше регулярное выражение следующим образом:
.replaceAll("(?s)\\B(\"\\b(.*?)\\b\"|\"\")\\B", "\\\\q{$2}")
См. regex demo .
Подробности
(?s)
- опция встроенного флага (равная Pattern.DOTALL
), которая делает .
совпадение символы разрыва строки тоже \B
- граница, не состоящая из слов, здесь это означает, что непосредственно слева должен быть символ, не состоящий из слов или начало строки (потому что после \B
, есть не-слово char, "
) (
- начало первой группы захвата: "\b(.*?)\b"
- "
, за которым следует слово char, затем Group 2 захватывая ноль или более символов, как можно меньше, а затем "
, которому предшествует слово char (вот почему этот шаблон не может соответствовать ""
, поскольку после первого и перед вторым должен быть буквой, ди git или _
) |
- или ""
- ""
подстрока
)
- конец первой группы захвата \B
- граница без слов, здесь это означает, что сразу направо, там должен быть не состоящим из слова char или концом строки (потому что до \B
есть не-слово char, "
).