2014-08-28 44 views
0

我必须在pl/sql中的较大的字符串中找到字符串的位置。较大的字符串在较大的字符串中的位置

可以说这个字符串是:'allthebest all the best' 只有当它是一个单独的单词而不是字符串的一部分时,我必须得到字符串“the”的位置。 在上面的例子中,单词“the”的位置应该是16,对应于独特的单词而不是4。不应该考虑“allthebest”中单词“the”的出现。

尝试这样:

select regexp_instr('allthebest all the best',' the ') from dual; 

Ofcourse,它工作时,有一个空间前述并按照单词 “the”。 但是,对于字符串为'allthebest all best the'的情况不起作用(注意:'the'后面没有尾随空格)

如何使它只能查找独立词汇在一个输入字符串中,它本身不是pl/sql中较小字符串的一部分?

回答

1

尝试模式'([^[:alpha:]]|^)the([^[:alpha:]]|$)'

这是“任何非字母或字符串的开头“后面跟着你要查找的单词,后面跟着”任何非字母或OR结尾“ e字符串“

+0

感谢詹姆斯。有用。但是,我想了解你是如何抵达它的。你能指出我对这里的这些正则表达符号代表了什么以及如何应用这些符号以便我能够理解它们并开始使用它们?当我谷歌这些,我迷路了很多材料,我不知道哪一个会给最好的信息。现在,说实话,他们看起来像是一群人物,对我来说是一个未经训练的眼睛! – Casey 2014-08-28 19:45:11

+0

如果单词“the”是pl/sql代码中的变量,该怎么办? Append在这里似乎不起作用:'([^ [:alpha:]] | ^)|| <要搜索的变量字符串> || ([^ [:alpha:]] | $)' – Casey 2014-08-28 19:54:19

+0

@Casey:这是我使用的语法:http://www.sqlsnippets.com/en/topic-10764.html – 2014-08-28 20:03:25

2

假设您可以简单地打破空格字符上的字符串以生成“单词”(更复杂的解决方案是查找指示单词结尾的标点符号),您可以简单地在开始和结束的字符串,然后从结果中减去1(以账户的事实,你加入之初的额外空间)

instr(' ' || <<your string>> || ' ', ' the ') - 1 
相关问题