所以我有以下模式:
SELECT REGEXP_REPLACE('000755490975','[^1-9]+\0') REGEX_RESULT FROM DUAL
我正在尝试切掉第一个零,直到第一个数字大于零,在某些情况下它可以工作,因为这是结果:
755490975
但是如果第一个字符为零,则在结果中显示该字符,因此假设具有以下条件:
SELECT REGEXP_REPLACE('0755490975','[^1-9]+\0') REGEX_RESULT FROM DUAL
结果是:
0755490975
我也在https://regex101.com/上进行了调试,但是找不到任何有用的东西。 正则表达式有什么问题?
答案 0 :(得分:1)
您的[^1-9]+\0
模式被解析为[^1-9]+0
-除从1
到9
的数字之外的任何1个或多个字符(因此,任何字母,标点符号,{{ 1}}等)后跟一个0
字符。因此,所有非0
字符后跟1-9
的字符都将在输入字符串的任何位置删除。
请注意,0
不会引发错误,因为POSIX正则表达式标准允许从\0
到1
的反向引用,因此没有零反向引用。因此,将其视为转义的“常规”(非特殊)字符。并且它们像没有逃脱一样被匹配。
您可以使用
9
正则表达式为
SELECT REGEXP_REPLACE('0755490975','^0+', '') AS REGEX_RESULT FROM DUAL
-字符串的开头^
-1个或多个0