Regex 仅当字符串不以';N';
我需要组合一个正则表达式,仅当字符串不以“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
[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
。干得好!