我必须匹配1到33689之间的数字,然后它应该是A,AB或ABC。
我现在有%1,^[0-9\.]{0,5}.*[A-z]+$
,我正在使用Oracle商务智能。因此,它不是直接的数据库查询。使用MySQL我用^[a-zA-Z0-9_]{1,5}([^[:digit:]]|$)
做了,我已经用
regexp_substr(replace(number,'.',''),'^(\d+)',1,1,NULL,1)
并且效果很好。
但我不能在Oracle商业智能中以1对1的比例。
答案 0 :(得分:1)
您的问题似乎与Oracle商业智能(OBIEE)相关,而不是正则表达式。使用^[0-9]{1-5}[A-Z]{1-3}$
实现1-5位数后跟1-3个字母的基本正则表达式。如果您想避免前缀零和match a specific numeric range,则以下内容与0-33689范围匹配:
0|[1-9][0-9]{0-3}|[12][0-9]{4}|3[0-2][0-9]{3}|33[0-5][0-9]{2}|336[0-7][0-9]|3368[0-9]
1-3'A'非常简单A{1-3}
。
正如博客文章Regular Expressions in OBIEE所暗示的那样,
这里唯一的问题是OBIEE不支持其SQL语言中的正则表达式,因此我必须使用EVALAUTE命令将Oracle的正则表达式语法传递回数据库。
它继续举例说明:
Evaluate('regexp_substr(%1,''regex_goes_here''), "FIELD_NAME")'
由于您没有提供执行此正则表达式的上下文,因此,如果 Oracle的正则表达式语法缺少某些正则表达式,那么您是否未能描述正确的模式则完全不清楚你正在使用的功能(我不能声称知道这种方言),但是,例如所有正则表达式引擎都不支持命名字符组(\d
)和字符范围({1-3}
)。
也许您的问题在于调用Evaluate
或regexp_substr
。
答案 1 :(得分:0)
替代解决方案:
匹配任何后跟A AA或AAA的5位数
/^[0-9]{5}(A?){3}$/
并将找到的匹配解析为整数
Pseudocode:
var tmp = parse_to_int(match)
将结果与33689进行比较
Pseudocode:
if(tmp <= 33689)
{
//proceed as you wish
}
答案 2 :(得分:0)