修剪字符串正则表达式中的第一个字符

时间:2018-07-24 12:37:19

标签: sql regex oracle

所以我有以下模式:

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/上进行了调试,但是找不到任何有用的东西。 正则表达式有什么问题?

1 个答案:

答案 0 :(得分:1)

您的[^1-9]+\0模式被解析为[^1-9]+0-除从19的数字之外的任何1个或多个字符(因此,任何字母,标点符号,{{ 1}}等)后跟一个0字符。因此,所有非0字符后跟1-9的字符都将在输入字符串的任何位置删除。

请注意,0不会引发错误,因为POSIX正则表达式标准允许从\01的反向引用,因此没有零反向引用。因此,将其视为转义的“常规”(非特殊)字符。并且它们像没有逃脱一样被匹配。

您可以使用

9

正则表达式为

  • SELECT REGEXP_REPLACE('0755490975','^0+', '') AS REGEX_RESULT FROM DUAL -字符串的开头
  • ^-1个或多个0

请参见regex demo online

Online Oracle demo

enter image description here