【发布时间】:2017-12-31 08:16:08
【问题描述】:
我的正则表达式:
^\+?(-?)0*([[:digit:]]+,[[:digit:]]+?)0*$
它正在删除十进制数中的前导+和前导尾0。
我在regex101测试过
对于输入:+000099,8420000 和替换 \1\2 它返回 99,842
我希望在 Oracle 数据库 11g 中得到相同的结果:
select REGEXP_REPLACE('+000099,8420000','^\+?(-?)0*([[:digit:]]+,[[:digit:]]+?)0*$','\1\2') from dual;
但它返回99,8420000(仍然存在拖尾0...)
我错过了什么?
编辑
它像正则表达式末尾的贪婪量词*,而不是懒惰的*?,但我肯定设置了懒惰的。
【问题讨论】:
-
你怎么知道哪个0是数字的一部分?你如何代表 9,000 人?
-
@WiktorStribiżew 来源?
-
@user7294900 这很容易。有一个惰性量词会从拖尾 0 中捕获至少一个零
-
我正在检查文档,但我怀疑正则表达式引擎是基于 Henry Spencer 的正则表达式库的。这意味着原因要深得多,因为它支持惰性量词。解决方法很简单。
-
@WiktorStribiżew 如果您将解决方案发布为答案,我将不胜感激