我正在寻找一个可以按任意顺序匹配令牌的Oracle正则表达式。
例如,假设我正在寻找“一二”。
我希望它能够匹配两者, “一个象征二” “另外两个”
令牌的数量可能会大于2,因此生成正则表达式的排列将是一个短暂的。
有没有比这更简单的方法呢
'(ONE.*TWO)|(TWO.*ONE)'
i.e
select *
from some_table t
where regexp_like(t.NAME_KEY, '(ONE.*TWO)|(TWO.*ONE)')
答案 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。