【问题标题】:Unrecognized backslash escape in kotlin regexkotlin 正则表达式中无法识别的反斜杠转义
【发布时间】:2019-01-18 10:07:16
【问题描述】:

我正在尝试在 Kotlin 中为我的 android 应用程序实现正则表达式。 我使用的正则表达式是:https://regexr.com/46ljf

尝试1:

val myRegex= """/()\\mCi=[0-9]*/g"""
val regex = sb.toString().toRegex()
var res= regex.find(value.toString())!!
if(res!= null) {
  Log.d("###regex", res.value)
}

尝试2:

val sb = StringBuilder()
sb.append("/()")
sb.append("\\")
sb.append("mCi=[0-9]*/g")

val regex = sb.toString().toRegex()
var res= regex.find(value.toString())!!
if(res!= null) {
  Log.d("###regex", res.value)
}

在这种情况下,我的正则表达式字符串没问题,但错误是:

“索引 5 附近模式中无法识别的反斜杠转义序列”

我也在尝试其他事情,但没有运气。

【问题讨论】:

  • 您的期望是什么?返回单个结果,mCi=268435455?
  • 你为什么使用 JavaScript 风格的正则表达式?去掉开头的/和结尾的/g,如果期望匹配组,需要移动括号
  • 另外,你的正则表达式有一个空的捕获组,需要\\mCi=1234 来匹配——原始字符串反斜杠只是``

标签: android regex kotlin


【解决方案1】:

您似乎想匹配mCi=268435455,输入字符串中的单个匹配项。

主要问题是您在字符串文字中使用了正则表达式文字符号。正则表达式分隔符和标志被解析为正则表达式模式的一部分,因此您没有匹配项。在第一个 sn-p 中,您甚至没有使用 myRegex

使用

val regex = """mCi=[0-9]*""".toRegex()
val s = "CellInfoLte:{mRegistered=NO mTimeStampType=unknown mTimeStamp=0ns CellIdentityLte:{ mMcc=219 mMnc=1 mCi=268435455 mPci=453 mTac=65535 mEarfcn=1501} CellSignalStrengthLte: ss=37 rsrp=-104 rsrq=-15 rssnr=2147483647 cqi=2147483647 ta=2147483647}"
var res = regex.find(s)?.value
println(res) // => mCi=268435455

请参阅Kotlin demo

如果你打算只获取mCi的数字部分,你可以使用

val regex = """(?<=mCi=)[0-9]*""".toRegex()

(?&lt;=mCi=) 正向后视要求在 0 位或更多位数字之前存在 mCi=,但将从匹配的文本中排除。见this Kotlin demo

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 2022-07-07
    • 2012-02-25
    • 2012-06-18
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多