我有以下使用的代码regexp_like()
,但是当我将 exp: 写入 时^[0-5]\.[\d]+$
,regexp_like()
它不会返回正确的结果。
我应该使用regexp_instr
吗?
我如何知道该使用哪一个?
它们是具有不同目标的两种不同功能,因此您应该使用最适合您情况的一种。
REGEXP_LIKE()
返回一个布尔值,并且只能在 WHERE 子句中使用,当您想要返回匹配条件的行时使用它。
REGEXP_INSTR()
返回一个整数,表示匹配子字符串的开始或结束。它不必在 WHERE 子句中使用。
本质上,where regexp_instr(...,...) > 0
它与 REGEXP_LIKE 相同,但可以在更多情况下使用。
请阅读两者的链接文档。
至于为什么你的条件没有返回正确的结果,那是因为你的正则表达式没有充分描述你想要返回的行。
在 Oracle中, REGEXP_LIKE是一个条件,而REGEXP_INSTR是一个函数。
您通常在WHERE
子句和其他一些地方使用条件。您可以在任何表达式中使用函数。
如果没有更多细节,很难判断哪一个更适合您的情况,但最终它们都完全相同。根据上面的链接,结果的表示当然是不同的,你必须考虑到这一点。
这里只是一个猜测,但我认为regexp_like
已经锚定在开始和结束,否则regexp_instr
将是多余的。
我不确定您的正则表达式引擎是否支持\d
字符类。尝试使用这些语法(使用 regexp_like):
^[0-5]\.[0-9]+$
或者
^[0-5]\.[[:digit:]]+$