Oracle中的简单正则表达式

时间:2010-10-16 16:23:46

标签: regex oracle

我有一个包含以下值的表:

ID     NAME        ADDRESS
1      Bob         Super stree1 here goes
2      Alice       stree100 here goes
3      Clark       Fast left stree1005
4      Magie       Right stree1580 here goes

我需要使用LIKE进行查询,并且只获取stree1的行(在这种情况下只获取ID为1的行)并使用以下查询:

select * from table t1 WHERE t1.ADDRESS LIKE '%stree1%';

但问题是我得到所有行,因为每个行都包含stree1加上一些字符/数字。

我发现我可以使用REGEXP_LIKE,因为我正在使用oracle,正确使用的正则表达式是什么:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1');

3 个答案:

答案 0 :(得分:4)

我认为这将是您正在寻求的注册:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:[^[:word:]]|$)');

如果您愿意,可以进一步简化为:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:\W|$)');

也就是说,'stree1'后面没有单词字符(即后跟空格/标点符号等),或者字符串末尾出现'stree1'。当然还有很多其他方法可以做同样的事情,包括单词边界'stree1 \ b',期待stree1中1之后的特定字符(例如,带有'stree1 \ s'的空格)等等...... / p>

答案 1 :(得分:0)

这可能有所帮助:

stree1\b

答案 2 :(得分:0)

第一个'\ W'告诉它它是一个非单词字符,因为你需要在'stree1'之后注意但是空格 并且'$'告诉它如果以stree1

结尾,则将其视为有效字符串
select *
from table1
where regexp_like(address,'stree1(\W|$)')