在对我的前一个问题(参见How do I create a regex to avoid a repeated number with optional hyphen?)进行了有用的回答之后,我们达成了一个符合我需求的解决方案。^(?!(\d)(?:-?\1)*$)\d{2}-?\d{7}$
上述正则表达式不包括以下数据:
- 00-0000000和00000000
- 11-1111111和111111111
- 22日至2222222日和22222222日
- ...
- 99-9999999和99999999
请注意,22-2222221有效。
另请注意,连字符的位置可以是第一个数字之后和最后一个数字之前的任何位置
既然一切看起来都很好,我们注意到这个模式与oracle数据库REGEXP LIKE命令不兼容。
对如何适应它有什么建议吗?提前感谢。
我读到这里Oracle regular expression replacement for negative lookahead/lookbehind和提供的解决方案似乎不适合我。
1条答案
按热度按时间ozxc1zmp1#
鉴于您的评论:
连字符可以位于第一个数字之后和最后一个数字之前的任何位置
您可以使用以下命令在不使用正则表达式的情况下完成所有操作:
如果连字符始终为第3个字符(如果存在),则:
如果你想使用正则表达式,那么你将需要两个正则表达式:
或任何地方的连字符:
或者,您可以在数据库内部启用Java,并启用use look-ahead via a Java method和正则表达式:
fiddle