Android Studio Kotlin 正则表达式与预期不同

2024-01-08

我遇到了特定正则表达式的问题,该正则表达式在 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(使用前将#替换为@)

Android Studio Kotlin 正则表达式与预期不同 的相关文章

随机推荐