RegEx以任何顺序匹配String令牌?

时间:2010-08-31 17:02:57

标签: sql regex oracle plsql

我正在寻找一个可以按任意顺序匹配令牌的Oracle正则表达式。

例如,假设我正在寻找“一二”。

我希望它能够匹配两者, “一个象征二” “另外两个”

令牌的数量可能会大于2,因此生成正则表达式的排列将是一个短暂的。

有没有比这更简单的方法呢

'(ONE.*TWO)|(TWO.*ONE)'

 i.e

select * 
from some_table t
where regexp_like(t.NAME_KEY, '(ONE.*TWO)|(TWO.*ONE)')

2 个答案:

答案 0 :(得分:6)

以下是使用全文搜索(FTS)功能的替代查询:

WHERE CONTAINS(t.name_key, 'ONE & TWO') > 0

请参阅Precedence Examples for criteria evaluation explanation

相关:

答案 1 :(得分:1)

您可以使用多种不同的正则表达式:

SELECT * 
FROM some_table t
WHERE regexp_like(t.NAME_KEY, 'ONE')
AND regexp_like(t.NAME_KEY, 'TWO')

一个问题是,它也会匹配原始正则表达式不匹配的“TWONE”。如果您还检查一些分隔标记或字边界,则可以修复此问题。

也不需要正则表达式来匹配常量字符串。你可以改用LIKE。