Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配范围内的数字,后跟1-3个字母_Regex_Oracle_Business Intelligence - Fatal编程技术网

Regex 匹配范围内的数字,后跟1-3个字母

Regex 匹配范围内的数字,后跟1-3个字母,regex,oracle,business-intelligence,Regex,Oracle,Business Intelligence,我必须匹配1和33689之间的数字,之后应该是A、AB或ABC 我现在有%1,^[0-9\.]{0,5}.*[A-z]+$,我正在与Oracle Business Intelligence合作。因此,它不是一个直接的数据库查询。使用MySQL,我用^[a-zA-Z0-9_307;]{1,5}([^[:digit:]]|$)创建了一个订单 regexp_substr(replace(number,'.',''),'^(\d+)',1,1,NULL,1) 而且效果很好 但我无法在Oracle Bu

我必须匹配1和33689之间的数字,之后应该是A、AB或ABC

我现在有%1,
^[0-9\.]{0,5}.*[A-z]+$
,我正在与Oracle Business Intelligence合作。因此,它不是一个直接的数据库查询。使用MySQL,我用
^[a-zA-Z0-9_307;]{1,5}([^[:digit:]]|$)
创建了一个订单

regexp_substr(replace(number,'.',''),'^(\d+)',1,1,NULL,1)
而且效果很好


但我无法在Oracle Business Intelligence中以1:1的比例进行排名。

您的问题似乎与Oracle Business Intelligence(OBIEE)有关,而不是与正则表达式有关。基本正则表达式由1-5位数字和1-3个字母组成,使用
^[0-9]{1-5}[A-Z]{1-3}$
实现。如果要避免前缀零和,则以下匹配范围为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}

正如博文所说

这里唯一的问题是OBIEE在其SQL语言中不支持正则表达式,因此我必须使用EVALAUTE命令将Oracle的正则表达式语法传递回数据库

它继续举例说明这一点:

Evaluate('regexp_substr(%1,''regex_goes_here''), "FIELD_NAME")'
由于您没有提供执行此正则表达式的上下文,因此完全不清楚您是否未能描述正确的模式,Oracle的正则表达式语法是否缺少您正在使用的某些功能(我不能声称知道这种方言),但例如命名字符组(
\d
)和字符范围并非所有正则表达式引擎都支持(
{1-3}

也许您的问题在于调用
Evaluate
regexp\u substr

替代解决方案:

匹配任何后跟AA或AAA的5位数字

/^[0-9]{5}(A?){3}$/
并将找到的任何匹配项解析为整数

Pseudocode:
var tmp = parse_to_int(match)
将结果与33689进行比较

Pseudocode:
if(tmp <= 33689)
    {
        //proceed as you wish
    }
伪代码:

如果(tmp您可以在以A、AA或AAA结尾的范围内尝试此操作:


不清楚您是否希望精确匹配此范围(regex不擅长此项,但它是可能的),或者位数是否足够接近,之后您可以进行进一步验证。因为Oracle Business Intelligence(OBIEE)在regex用户中可能不太普遍,也许您可以澄清OBIEE不支持的regex部分。是的,我希望匹配范围(我知道不可能获得).事实上,我必须匹配A、AA或AAA。您在这里处理两个域,在您创建正确的正则表达式并设法正确调用它之前,您没有一个有效的解决方案。您的问题被否决并被否决,因为如果您坚持使用正则表达式或调用它,您没有明确表示。请澄清您的问题r使
regexp\u substr
为任何正则表达式工作的进展,否则人们为生成正确的正则表达式所做的努力是没有希望的。这是正确的。我当然使用evaluate。它看起来像evaluate('regexp\u INSTR(?:0?\d{1,4}[1-3]{0,2}[1-5][1-8]\d)[I]{1,3}+$,“TelDetails”,“SignNumber”)“0'0”所以,如果我使用你的代码作为范围,我也得到字母。我也得到“00A05A”或“00-01”。我也得到“00A05A”或“00A05A”或“00-05”。这只是一个查询。它看起来像是一个查询。它看起来像是一个评估(REGEXP)它看起来像是一个评估(REGEXP)的评估(Regeexp)INSTR(1.1.1.1,1-1-1.1-9.1.1-9.1.1.1.1.9.9.0.9.9.9.0.0.0.0.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.代码>意味着“在字符串的开头匹配
a
,或者在字符串的结尾匹配
b
。”这是因为
^
$
绑定比
|
更紧。因此您需要编写
^(a | b)c$
用于适当的子正则表达式
a
b
c
。Tks Tolar。问题不在于字母,而在于范围。我仍然不知道OBIEE是如何工作的。我从一个月以来一直在使用它。但是,我很确定问题在于正则表达式,因为它与MySQL不完全一样。现在它看起来像“REGEXP”(%1,,^[1-9][0-9]{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[A]{1-3}+$''您在评论中发布的正则表达式有很多匹配项,但没有结尾的A字母。我不确定您使用它的上下文,但在找到候选匹配项后可以测试范围,这就是我的答案,具体如下:候选项='REGEXP_INSTR(%1',/^[0-9]{5}(A?{3}$/'';s_number=regex_匹配项(候选者,“/^[0-9]{5}$/”;i_number=parse_int(s_number);如果(i_编号结尾不一定必须与A完全一致。之后它可能会有一些其他符号,但它们对我来说并不重要。这就是我只要求主要部分的原因。对此表示抱歉。我想从0检索到33689。在数据库中,它可以是33689A或33.689A或33.689A,这是我的主要问题。它与一些旧数据有关。有些是200多年前的档案。由于我们过去没有代码,我正在试图找出哪些代码已经存在于系统中,而哪些没有。这是否更好?我将改进我的问题。就像评估('REGEXPôINSTR(%1),^(?:336[0-8][0-9]| 33[0-5][0-9]{2}3[0-2][0-9]{3}[12][0-9]{4}[1-9][0-9]{1,3+]“???我只得到了6个结果。它们和预期的结果一样(例如20884A),但应该还有上千个。因此,一定还缺少一些东西……我现在进行了评估('REGEXP_INSTR(%1),^(?:336[0-8][0-9]| 33[0-5][0-9]{2}3[0-2][0-9]{3}[12][0-9]{4}[1-9][0-9]{1,3}[1-9][1+]“仍然是相同的6个结果……对不起,一些例子。它应该是123A或30.111AA。实际上,结果应该是”3011AA“"。但首先我希望匹配字符串。当然,我仍在尝试改进以将.or空格放在一边。正则表达式从字符串的
^
开始匹配,直到字符串的
$
结束。您尝试匹配的值如
123A
,它们是在字符串中还是正好是这些值?您可以使用没有
^$
。正则表达式不匹配
30.111 AA
,因为其中有一个空格和一个点。是的,su