我遇到了特定正则表达式的问题,该正则表达式在 Android Studio 中运行时返回的值与预期不同。
设想:
代码很简单:
val regex = "(?<=N|E|\\G)\\d{2}(?=\\d*$)".toRegex()
print("${regex.findAll("N2032354345").count()}")
这应该打印 5,因为该字符串中有 5 个匹配项(https://regex101.com/r/6PDbkI/1 https://regex101.com/r/6PDbkI/1)如果我们遇到Ideone.com https://ideone.com/1YCCnK or in 科特林游乐场 https://pl.kotl.in/r1QlMyXaX,结果是预期的 5。
However, in Android Studio, the result is 1:
Theory:
Android Studio 中的正则表达式似乎无法使用\G
运算符(可能与Kotlin 与正则表达式的拆分工作不符合预期 https://stackoverflow.com/q/52072404/3410697)
有人遇到过同样的问题吗?有没有什么方法可以将正则表达式更改为在 Android Studio 中不会失败的类似正则表达式?我是否缺少某些设置?
Android Pattern文档 https://developer.android.com/reference/java/util/regex/Pattern lists \G
作为受支持的运营商:
\G
上一场比赛结束
因此,这听起来像是一个 Android Studio 错误。
在修复该问题之前,您可以针对您的场景使用一种解决方法,其中只涉及输入中的十几个数字:
val regex = "(?<=[NE]\\d{0,100})\\d{2}(?=\\d*$)".toRegex()
模式匹配:
-
(?<=[NE]\d{0,100})
- 紧随其后的位置N
or E
和 0 到 100 位数字
-
\d{2}
- 两位数
-
(?=\d*$)
- 后面跟有 0 个或多个数字到字符串末尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)