Regex 仅当字符串不以';N';

Regex 仅当字符串不以';N';,regex,oracle,Regex,Oracle,我需要组合一个正则表达式,仅当字符串不以“N”开头时才匹配模式 这是到目前为止我的模式[A-E]+[-+]?。 现在我要确保它不匹配以下内容: N\A NA NB+ NB- NCAB 这适用于Oracle SQL DB中的REGEXP\u SUBSTR命令 更新 看来我应该说得更具体些,对不起 我想从字符串中提取[a-E]+[-+]?,但是如果字符串也匹配^(N | N),那么我希望我的正则表达式不返回任何内容 见以下示例: String Returns N/A F1/AAA A

我需要组合一个正则表达式,仅当字符串不以“N”开头时才匹配模式

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

N\A
NA
NB+
NB-
NCAB
这适用于Oracle SQL DB中的
REGEXP\u SUBSTR
命令

更新

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

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

见以下示例:

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

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

哎呀

这实际上需要包括一个“或^”

应该是这样的:

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


很抱歉……看来正确答案已经发布了。

要匹配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]')

好吧,我想出来了,我稍微扩大了问题的范围,我意识到我还可以使用
REGEXP\u SUBSTR
的其他参数,在这种情况下,我只能返回第二个子字符串

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


我仍然要感谢你们,很多好的想法让我来到这里。

是否保证比赛在比赛开始的时候?如果是这样,只需用
^
启动正则表达式。如果开头没有
N
,那么应该有什么?没有几个有效匹配的例子会有帮助。不,不会,也不能保证最后一定会有。连续下降投票人周围…@PedroLobito:没问题,我保留我的答案。谢谢,我错过了!这还不是他们想要的。他们只关心
N
是否是第一个字符,而不一定是在匹配之前
ANB
仍然应该匹配
B
@4castle:如果使用两个谓词(测试),则不会匹配,第一个谓词确保不存在
N[A-E]
,第二个谓词确保至少存在一个
[A-E]
。我开始认为使用两个正则表达式(如您所说)是使用此解决方案的唯一方法。@4castle:Abotly不,您可以构建一个(有点复杂)的模式,确保字符串从头到尾只包含
[a-E]
,前面不带N。问题是:这样做有效吗?不,这不是他们想要的。像
BANANAAA
这样的字符串需要匹配
AAA
您解决了这个问题,这很好,但是您在这里发布的内容并不能解决您向我们提出的问题。我可以看到您从何而来最初我认为我需要的是正确的正则表达式btw,它应该是
E
而不是
D
。干得好!