Зачем мне нужны две косые черты в Java Regex, чтобы найти символ"+"?

только что-то я не понимаю весь смысл. Я понимаю, что мне нужно избежать каких-либо специальных символов значения, если я хочу найти их с помощью regex. И я также где-то читал, что вам нужно избежать обратной косой черты в Java, если она находится внутри строкового литерала. Мой вопрос в том, что если я "избегаю" обратной косой черты, не теряет ли она свой смысл? Таким образом, он не сможет избежать следующего символа плюс?

выдает ошибку (но он не работает так как вы избегаете этих специальных персонажей?):

replaceAll("+s", ""));

работает:

replaceAll("+s", ""));

надеюсь, это имеет смысл. Я просто пытаюсь понять функциональность, почему мне нужны эти дополнительные косые черты, когда учебники regex, которые я прочитал, не упоминают их. И такие вещи, как "+" должен найти символ плюс.

2 ответов


есть два "escapings" происходит здесь. Первая обратная косая черта-избежать второй обратной косой черты для языка Java, чтобы создать фактический символ обратной косой черты. Символ обратной косой черты-это то, что ускользает от + или s для интерпретации регулярных выражений. Вот почему вам нужны две обратные косые черты - одна для Java, другая для механизма регулярных выражений. Только с одной обратной косой чертой Java reports \s и \+ как незаконные символы побега - не для обычных выражения, но для фактического символа на языке Java.


Фунда за лишние слеши заключается в том, что , во-первых Слэш '\' бегство строки и второй Слэш '\' бегство за выражение.