我正在尝试在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附近的模式中无法识别的反斜杠转义序列”
我也在尝试其他事情,但是没有运气。
答案 0 :(得分:2)
似乎您想匹配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=)
正向查找将要求mCi=
在0或多个数字之前紧跟其后,但将从匹配的文本中排除。参见this Kotlin demo。