Kotlin: Не удается разобрать регулярное выражение, содержащее несколько обратных слешей. Почему у меня есть «Незакрытая группа»? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сопоставить ссылку привязки, которая является "тройным экранированием" в этом примере строки:

blablabla some text <a href=\\\"#anchor\\\"> some more text

Это мое регулярное выражение:

href=(\\\\\\)(\"#.*)(\\\\\\)\"

Если я тестирую его на regex101.com , он работает, но мне нужно выполнить эту фильтрацию в Kotlin, что, как я думал, я мог бы сделать так:

fun findEscapedAnchors(text: String): String {
    val pattern = "href=(\\\\\\)(\"#.*)(\\\\\\)\""
    val regex = pattern.toRegex()
    val matches = regex.find(text)

    // do something with the matches
}

Прежде всего, если я вставлю эту строку в мой код (в Android Studio), она будет автоматически экранирована еще больше, но она не будет работать. Если я отредактирую его так, чтобы он соответствовал приведенной выше строке, он будет жаловаться на то, что есть незамкнутая группа. Я подумал, что, может быть, мог бы выразить это в тройных кавычках, чтобы не убегать от символов, но это тоже не удалось. Что я делаю неправильно?

1 Ответ

1 голос
/ 14 января 2020

Я понял это сам: необработанная строка (тройные кавычки) действительно была способом к go, но Regex, очевидно, все еще нуждается в экранировании символов в строке. Раньше я их удалял, потому что думал, что так работают необработанные строки, но я ошибался. Так что теперь работает с этим:

val regex = """href=(\\\\\\)(\"#.*)(\\\\\\)\"""".toRegex()
...