我在Java计算器程序中使用以下正则表达式来标记输入:
((?<=[(^+/*-])|(?=[(^+/*-]))
我之前使用的是这个正则表达式(注意插入符号已移到最后):
((?<=[(+/*-^])|(?=[(+/*-^]))
这个引起了问题,因为多位数输入会被切割成单个字符。即,“11”将分成“1”,“1”。
我知道插入符号是字符类前面的一个特殊字符,但是为什么它会在最后放置时导致正则表达式无法正常工作?
答案 0 :(得分:4)
在[(+/*-^]
,*-^
匹配*
到^
范围内的字符,这就是您的问题。
但是当你写[(^+/*-]
时,它会匹配(
,^
,+
,/
,*
或{{1}中的一个}}
更清晰的例子:
-
将匹配[12a-z]
,1
或2
与a
之间的字符
z
匹配[12az-]
,1
,2
,a
或z