导致这两个正则表达式以不同方式工作的原因是什么?

时间:2015-02-08 08:23:31

标签: java regex

我在Java计算器程序中使用以下正则表达式来标记输入:

((?<=[(^+/*-])|(?=[(^+/*-]))

我之前使用的是这个正则表达式(注意插入符号已移到最后):

((?<=[(+/*-^])|(?=[(+/*-^]))

这个引起了问题,因为多位数输入会被切割成单个字符。即,“11”将分成“1”,“1”。

我知道插入符号是字符类前面的一个特殊字符,但是为什么它会在最后放置时导致正则表达式无法正常工作?

1 个答案:

答案 0 :(得分:4)

[(+/*-^]*-^匹配*^范围内的字符,这就是您的问题。

但是当你写[(^+/*-]时,它会匹配(^+/*或{{1}中的一个}}

更清晰的例子:

  • -将匹配[12a-z]12a之间的字符

  • z匹配[12az-]12az