Regex groupValues仅返回重复模式的最后一次出现
打印Regex groupValues仅返回重复模式的最后一次出现,regex,kotlin,Regex,Kotlin,打印[AB,B],但我希望结果是[AB,A,B] 这种行为是预期的吗 有没有办法获得[AB,a,B] 您得到的输出是预期的(A | B)+匹配并捕获A,将匹配值放入组1缓冲区,然后捕获B(当+匹配一次或多次时),并将值放入组1重新写入A内部 因此,获取所需内容的唯一方法是捕获A或B,但这并不是那么容易 看 看 它输出[AB,A,B],因为整个字符串与正则表达式匹配,值作为第一项添加,捕获1作为第二项添加,捕获2作为第三项 但是如果您有一个较长的字符串,比如123abc456def,并且您有(?
[AB,B]
,但我希望结果是[AB,A,B]
- 这种行为是预期的吗
- 有没有办法获得
[AB,a,B]
- 您得到的输出是预期的
(A | B)+
匹配并捕获A
,将匹配值放入组1缓冲区,然后捕获B
(当+
匹配一次或多次时),并将值放入组1重新写入A
内部
因此,获取所需内容的唯一方法是捕获A
或B
,但这并不是那么容易
看
看
它输出[AB,A,B]
,因为整个字符串与正则表达式匹配,值作为第一项添加,捕获1作为第二项添加,捕获2作为第三项
但是如果您有一个较长的字符串,比如123abc456def
,并且您有(?:(\d+)|(\p{L}+)+
,那么您就可以了。因此,对于123abc456def
输入,您将获得[123abc456def,456,def]
但是,如果需要匹配这些字符串,则应提供更多详细信息。是,应提供。但是对于
AB
、A
和B
,这有点不容易。如何println(Regex((?:(A)|(B))+).matchIntelling(“AB”)!!.groupValues)
?Regex组不能捕获任意数量的匹配项,它们只“保留”最后一个匹配项。(有一些正则表达式引擎可以做到这一点,但通常正则表达式不支持。)没有正则表达式可能会更好,但在不知道程序在做什么的情况下很难说。@绘制实际正则表达式要复杂得多,所以我宁愿坚持这一点。我可能会使用Wiktor的解决方案。@WiktorStribiż您可以随意将其转换为答案。@assylias:但是如果您有123abc456def
,然后您将使用(?:(\d+)|(\p{L}+)+
。。。您将只获得[123abc456def,456,def]
?看见
println(Regex("(A|B)+").matchEntire("AB")!!.groupValues)
println(Regex("(?:(A)|(B))+").matchEntire("AB")!!.groupValues)