Как найти первые кавычки без экранирования в Java?

Пример, у меня есть следующая строка:

    String str = "te\\\"st\""

и я должен найти индекс первого неэкранированного (без \) ". В этом примере правый индекс - 9.

Есть ли какое-либо регулярное выражение или какое-либо другое решение для решения этой проблемы?

У меня есть следующий код

    Pattern pattern = Pattern.compile(HERE A REGEX);
    Matcher matcher = pattern.matcher(json);

    if (matcher.find()) {
        System.out.println(matcher.start());
    }

но я не знаю, какое регулярное выражение использовать.

Вы хотели использовать String str = "te\\\"st\""? И это 7-й знак, а не 9-й. Поделитесь нерабочим кодом, чтобы уточнить, с какой проблемой вы столкнулись.

Wiktor Stribiżew 18.04.2018 12:32

Да, извините, я имею в виду String str = "te \\\" st \ "".

Károly Neue 18.04.2018 12:42

Хорошо, в чем проблема с вашим подходом? Обратите внимание, что Pattern pattern = Pattern.compile(HERE A REGEX); не компилируется. Какую схему вы пробовали?

Wiktor Stribiżew 18.04.2018 12:42

Как только вы что-нибудь придумаете, обновите вопрос, пока это не по теме.

Wiktor Stribiżew 18.04.2018 13:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать это регулярное выражение, чтобы найти первую неэкранированную цитату,

^[^"\\]*?(?:[\\]{2})*(")

Демо ,,, в котором я намеревался зафиксировать первую неэкранированную цитату для group 1 (\1 или $1).

И чтобы найти index из quote (captured group 1), вам нужно будет получить значение,

matcher.start(1)

Другие вопросы по теме