首页 > 解决方案 > Kotlin:无法解析包含多个反斜杠的正则表达式 - 为什么我有一个“未封闭组”?

问题描述

我正在尝试匹配此字符串示例中“三重转义”的锚链接:

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 中),它会自动转义得更多,但它不起作用。如果我编辑它以匹配上面的字符串,它会抱怨有一个未封闭的组。我想我可以把它放在三引号中,不必转义字符,但这也失败了。我究竟做错了什么?

标签: regexparsingkotlin

解决方案


我自己已经弄清楚了:原始字符串(三引号)确实是要走的路,但Regex显然仍然需要字符串中的字符转义。之前,我将它们删除,因为我认为这就是原始字符串的工作方式,但我错了。所以它现在可以使用:

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

推荐阅读