Когда вы используете (^[^\"])($)(?<!")
, вы сопоставляете любой символ кроме "
в начале строки, и вам требуется, чтобы конец строки появлялся сразу после этого символа, а затем вы выполняете дополнительную проверку, что символне "
(таким образом, вид сзади в конце полностью избыточен).
Если вам нужно добавить "
в начале или конец, где первый / последний символне "
, вам нужно использовать чередование:
s=s.replaceAll("^(?!\")|$(?<!\")", "\"");
См. это регулярное выражение demo .
Подробности
^(?!\")
- соответствует началу строки, если в начале нет "
|
- или $(?<!\")
- соответствует концустрока и проверьте, есть ли "
в конце, потерпите неудачу, если есть "
.
Если вы хотите обернуть всю строку с "
, если естьнет "
s вокруг строки , используйте
s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");
Или более простой подход без регулярных выражений с конкатенацией строк и парой startsWith
и endsWith
:
if (!s.endsWith("\"") && !s.startsWith("\"")) {
System.out.println("\"" + s + "\"");
}
См. эту демонстрацию Java .Шаблон здесь означает
(?s)^
- включите флаг Pattern.DOTALL
и укажите начало строки [^\"]
- любой символ кроме "
(?:.*[^\"])?
- необязательная последовательность (что, если строка содержит только 1 символ?) Из любых символов 0+, а затем из любого символа, отличного от "
... $
- в конце строки.
$0
обозначает все значение совпадения.