正则表达式模式

时间:2019-01-13 07:31:40

标签: java regex

使用跟随模式查找一位十六进制的Im     “ 0 [xX] [0-9a-fA-F]” 并在下面的源字符串中找到它     “ 12 0x 0x12 0Xf 0xg” 索引从0到17。

输出是0和11索引。

我有一个问题,当以3个字母为一组从左到右使用数据时,第11个位置匹配不应该出现,然后如何识别十六进制数字的第11个位置。

Pattern p6 = Pattern.compile("0[xX][0-9a-fA-F]");
Matcher m6 = p6.matcher("12 0x 0x12 0Xf 0xg");
while(m6.find()) { System.out.print(m6.start( ));   
}

2 个答案:

答案 0 :(得分:0)

11是有效十六进制的位置,例如模式匹配。当您的模式包含x个字符时,这并不意味着它将仅匹配从y位置开始的那些字符,从而y = 0(mod x)。

另一方面,它们不应重叠,例如,使用模式“ aaa”,字符串“ aaaaa”将只匹配位置0,而对于“ aaaaaa”,则将匹配0和3。

答案 1 :(得分:0)

您似乎认为,由于正则表达式只能匹配3个字母匹配项,因此正则表达式引擎将以3个字母为一组的形式查看您的字符串,因此匹配项的开始只能是3的倍数。这是一个误解

正则表达式引擎将始终每次前进1个字母,并检查其是否与模式匹配。

您的程序产生正确的输出6和11。我将|放在了索引6和11处。索引0正好在第一个字符之前。如您所见,它们是比赛的开始。

12 0x |0x12 |0Xf 0xg