正则表达式检查格式为ab0ab0的数字

时间:2018-03-09 08:57:14

标签: regex oracle

我正在尝试在oracle中编写一个与以下数字格式匹配的正则表达式: ab0ab0其中b可以严格等于a-1或a + 1

但我在增加或减少正则表达式中的数字值方面遇到了困难。

我不想在正则表达式中添加所有可能的值并进行更改。

到目前为止我所做的是:^(\ d)(\ d)0 \ 1 \ 2(0)$ 但它不检查b = a-1或a + 1

2 个答案:

答案 0 :(得分:2)

除了写出所有选项,你可以从另一个数字中减去一个数字:

SELECT *
FROM   your_table
WHERE  TO_NUMBER( REGEXP_SUBSTR( your_column, '^(\d)(\d)0\1\20$', 1, 1, NULL, 1 ) )
       - TO_NUMBER( REGEXP_SUBSTR( your_column, '^(\d)(\d)0\1\20$', 1, 1, NULL, 2 ) )
       IN ( -9, -1, 1, 9 )

-99将包含值090090900900,如果您希望减法/添加包围 - 如果您不想要这些然后只需使用-11

或者,检查2位数值是1还是10模11:

SELECT *
FROM   your_table
WHERE  MOD( TO_NUMBER( REGEXP_SUBSTR( your_column, '^(\d\d)0\10$', 1, 1, NULL, 1 ) ), 11 )
         IN ( 1, 10 )
OR     your_column IN ( '090090', '900900' )

答案 1 :(得分:0)

就像Wiktor said一样,你不能在没有替代的情况下这样做。

然后向前走,然后为你打字。

^((01|12|23|34|45|56|67|78|89|90|09|98|87|76|65|54|43|32|21|10)0){2}$