Нераспознанный побег с обратной косой чертой в регулярном выражении kotlin - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь внедрить регулярные выражения в мое приложение для Android в Kotlin. Я использую регулярное выражение: 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)
}

В этом случае моя строка регулярного выражения в порядке, но ошибка:

"Нераспознанная escape-последовательность обратной косой черты в шаблоне рядом с индексом 5"

Я тоже пробовал другие вещи, но не повезло.

1 Ответ

0 голосов
/ 18 января 2019

Кажется, вы хотите сопоставить 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 .

Если вы планируете получить только цифру в части mCi, вы можете использовать

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

Для положительного взгляда (?<=mCi=) потребуется присутствие mCi= непосредственно перед 0 или более цифрами, но оно будет исключено из сопоставленного текста. См. это демо Kotlin .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...