正则表达式重复捕获组未返回最后匹配结果的问题
正则匹配问题解决方案
你的问题出在正则开头的((\d+)+)上——这部分完全多余,还会先匹配字符串最开头的数字,再靠.*吃掉中间所有内容到最后一个x前,所以第一个捕获组拿到的是开头的1,嵌套的捕获组也重复了这个值。
要提取最后一个x之前的数字和x之后的第一个数字,直接用这个正则即可:
.*(\d+)x(\d)
逻辑说明:
.*是贪婪匹配模式,会尽可能吃掉前面所有内容,直到遇到最后一个x才停止回溯,确保我们拿到的是最后一个x前的数字(\d+)捕获最后一个x前面的连续数字(对应测试输入里的3)x精准匹配目标分隔符(\d)捕获x后面的第一个数字(对应测试输入里的4)
如果要确保只匹配纯数字和x组成的字符串,避免其他无关字符干扰,可以加上首尾锚定:
^.*(\d+)x(\d)$
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

