regex - 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 中),它会自动转义得更多,但它不起作用。如果我编辑它以匹配上面的字符串,它会抱怨有一个未封闭的组。我想我可以把它放在三引号中,不必转义字符,但这也失败了。我究竟做错了什么?
解决方案
我自己已经弄清楚了:原始字符串(三引号)确实是要走的路,但Regex
显然仍然需要字符串中的字符转义。之前,我将它们删除,因为我认为这就是原始字符串的工作方式,但我错了。所以它现在可以使用:
val regex = """href=(\\\\\\)(\"#.*)(\\\\\\)\"""".toRegex()
推荐阅读
- mysql - 无法在 Jenkins 中恢复 docker MYSQL 数据库
- pandas - 熊猫索引细微之处
- java - 组操作中的嵌套字段引用 - SpringData MongoDB。试图获取所有文档的 cpu 和 memory_in_gb 的总和
- r - R Shiny Dashboard - 使用 source('file.R') 加载脚本
- java - 如何按Android中修改的日期对数组进行排序
- matlab - 在 Octave 中矢量化而不是 for 循环
- karate - 如何用空手道做软断言?
- angular - 将元素绑定到 Angular mat-select
- julia - Julia 在不存在时报告额外的 )
- iis - Blazor WASM 在使用 HTTPS 协议的 iis 上发布后显示错误 403