仅当字符串不以'N'开头时匹配模式的正则表达式

时间:2016-04-14 21:36:33

标签: regex oracle

只有当字符串不以'N'开头时,我才需要组合一个匹配模式的正则表达式。

到目前为止,这是我的模式[A-E]+[-+]?。 现在我想确保它与以下内容不匹配:

N\A
NA
NB+
NB-
NCAB

这适用于Oracle SQL DB中的REGEXP_SUBSTR命令

更新

看起来我应该更具体,对不起

我想从字符串[A-E]+[-+]?中提取,但如果字符串也匹配^(N|n),那么我希望我的正则表达式不返回任何内容。

见下面的例子:

String  Returns
N/A     
F1/AAA  AAA
NABC    
FABC    ABC

3 个答案:

答案 0 :(得分:2)

要匹配A和E之间不带N的字符,您可以使用:

 ([^N]|^)[A-E]+

如果你想避免包含N[A-E]的字段使用模式N[A-E] 在查询中使用否定(换句话说,使用两个谓词,这一个用于排除NA和第一个找到A)

更清楚:

WHERE NOT REGEXP_LIKE(coln, 'N[A-E]') AND REGEXP_LIKE(coln, '[A-E]')

答案 1 :(得分:1)

好吧我弄清楚了,我稍微扩大了问题的范围,我意识到我也可以使用REGEXP_SUBSTR的其他参数,在这种情况下,我只能返回第二个子串。

REGEXP_SUBSTR(field1, '^([^NA-D][^A-D]*)?([A-D]+[-+]?)',1,1,'i',2)

我仍然必须给你们这些信誉,很多好主意让我来到这里。

答案 2 :(得分:0)

刚扔一个[^ N]?在前。应该这样做。

... OOPS

实际上需要包含“OR ^”......

它应该是这样的:

([^ N] | ^)?[A-E] + [ - +]

很抱歉......无论如何,看起来正确的答案已经发布了。