kotlin正则表达式中无法识别的反斜杠转义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin正则表达式中无法识别的反斜杠转义相关的知识,希望对你有一定的参考价值。

我正在尝试在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,输入字符串中的单个匹配。

主要问题是您在字符串文字中使用正则表达式文字表示法。正则表达式分隔符和标志被解析为正则表达式模式的一部分,因此您没有匹配。在第一个片段中,您甚至没有使用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()

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

以上是关于kotlin正则表达式中无法识别的反斜杠转义的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 反斜杠的匹配 2018-11-30

js无法识别的字符都有哪些

java 和 JS(javaScript)中的反斜杠正则转义

python 正则表达式中反斜杠()的麻烦和陷阱

python 正则表达式中反斜杠()的麻烦和陷阱 (转)

re模块 正则表达式