Regex Oracle正则表达式替换为负的前向/后向
我正在编写一个PL/SQL Oracle过程,该过程在列中查找可能的客户编号。客户编号的长度为7位,可以加前缀或后缀,并带有任意数量的字符。但是有些值包含>7位数字,在这种情况下,我想忽略它们。因此,“A/C 1234567”和“Cust1234567B”应返回客户编号的匹配项,1234567,但“01234567”和“123456789”不应返回Regex Oracle正则表达式替换为负的前向/后向,regex,oracle,Regex,Oracle,我正在编写一个PL/SQL Oracle过程,该过程在列中查找可能的客户编号。客户编号的长度为7位,可以加前缀或后缀,并带有任意数量的字符。但是有些值包含>7位数字,在这种情况下,我想忽略它们。因此,“A/C 1234567”和“Cust1234567B”应返回客户编号的匹配项,1234567,但“01234567”和“123456789”不应返回 我使用的是\d{7},但这将返回所有示例的匹配项,因此我正在寻找类似于(?)的内容,但不支持负向前看和向后看。如果没有向后看和向后看断言,您可以尝试
我使用的是
\d{7}
,但这将返回所有示例的匹配项,因此我正在寻找类似于(?)的内容,但不支持负向前看和向后看。如果没有向后看和向后看断言,您可以尝试任何建议?
(^|\D)\d{7}(\D|$)
我也面临同样的问题,我所做的只是
NOT regexp_like(<pattern_you_want_to_negate>)
不是regexp_like()
(?:^ |\D)\D{7}(?:\D}$)
?@zerkms:我想你应该把它作为一个答案发布出来。:-)试试下面的方法:从DUAL WHERE REGEXP_LIKE('1234567','(?:^ |\D)\D{7}(?:\D}$)中选择'Matched'。。。不返回匹配在我的测试中,我发现它没有返回我所需要的内容,例如,“Cust1234567B”返回“t1234567B”。因此,我用另一个REGEXP_SUBSTR(REGEXP_SUBSTR('cus1234567b','(?:^ |\D)\D{7}(?:\D |$),'\D{7}')来包围它,只需拉出7位数字。如果原始文件中存在第一个和最后一个非数字字符,是否有办法排除返回这些字符?@Laurence:如果oracle支持?:
,您记得我们应该删除这些字符