我试图匹配一个模式,就像'[email protected]; 12345 @ 45; [email protected]'。我正在尝试Oracle(11g)REGEXP_LIKE函数要做到这一点。 这里是我的代码 -要检查指定的模式是否重复通过字符串的整个长度
SET SERVEROUTPUT ON;
开始
如果REGEXP_LIKE(TRIM( '[email protected]; 12345 @ 45; [email protected]'。),“[^ \ d + @((\ d + \ d {0,4}) '(\ d +)); $] +')
then
dbms_output.put_line('yes');
else
dbms_output.put_line('No');
end if;
end;
对于上面的代码输出为“是”,这是我wanted.But这种码也返回“是”对图案像“12345 @ 5.6,12345 @ 45; [email protected]”(而不是在“5.6”之后我指定了逗号)。
它基本上是检查模式,但是如果它发现至少有一种这样的模式,则返回true并且不检查剩余的字符串以确保一切都在模式中。
我只想在字符串的整个长度内指定类型的模式。如果某些内容不符合模式,我需要返回'否'。
另如: -对于假设有一个字符串“ABC,ABC,ABC”我想检查模式“ABC”不仅存在于字符串中也重演通过整个字符串。 这意味着代码应该为'abc; bca; def' 等字符串返回false,并且只应为'abc; abc; abc'返回true。
要明确,我只是想检查指定的模式是否重复了整个字符串的长度,否则我想返回'否',不只是看到至少存在一个存在并返回true,我不知道有多少这种模式存在时代
希望我清楚,请帮助。谢谢。
您的描述真的不是很清楚。试试''^ [0-9] + @ [0-9] +(\。[0-9] {0,4})?(; [0-9] + @ [0-9] +(\。 [0-9] {0,4})?)+ $''。如果它适合你,我会发布解释。请参阅[这里是如何工作的](https://regex101.com/r/y1y4hg/1)。 –
我在第一个例子中看不到重复模式。你需要给出一个更精确的“模式”和“匹配”的定义。 – mathguy
@Tejaduggirala - 好的,这样做更有意义。我用“数字”来表示你的意思是非负数(减号不允许),并且它必须在10位(没有十六进制数字,没有使用指数的科学记数法)。小数点如何...是.33允许的,或者在这种情况下是否必须是0.33?此外,是1.允许(整数1)? Oracle允许.33和1.作为数字 - 是否满足您的业务需求? – mathguy