我正在尝试在oracle中编写一个与以下数字格式匹配的正则表达式: ab0ab0其中b可以严格等于a-1或a + 1
但我在增加或减少正则表达式中的数字值方面遇到了困难。
我不想在正则表达式中添加所有可能的值并进行更改。
到目前为止我所做的是:^(\ d)(\ d)0 \ 1 \ 2(0)$ 但它不检查b = a-1或a + 1
答案 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 )
(-9
和9
将包含值090090
和900900
,如果您希望减法/添加包围 - 如果您不想要这些然后只需使用-1
和1
)
或者,检查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}$