【问题标题】:position of smaller string within a larger string较小字符串在较大字符串中的位置
【发布时间】:2014-10-22 18:16:02
【问题描述】:

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

假设字符串是:'allthebest all the best' 只有当它是一个单独的单词而不是字符串的一部分时,我才必须获取字符串“the”的位置。 在上述情况下,单词“the”的位置应该是16,对应独立单词而不是4。不考虑“allthebest”中出现的单词“the”。

试过这个:

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

当然,当单词“the”前后有空格时,它可以工作。 但是,不适用于字符串为 : 'allthebest all best the' 的情况(注意:单词 'the' 后面没有尾随空格)

如何使其仅在输入字符串中查找独立的单词,而该输入字符串本身不是 pl/sql 中较小字符串的一部分?

【问题讨论】:

    标签: regex plsql oracle11g


    【解决方案1】:

    假设您可以简单地打破空格字符上的字符串以生成“单词”(更复杂的解决方案是同时查找指示单词结尾的标点符号),您可以简单地在开头添加一个空格和字符串的结尾并从结果中减去 1(以说明您在开头添加了额外的空格)

    instr( ' ' || <<your string>> || ' ', ' the ' ) - 1
    

    【讨论】:

      【解决方案2】:

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

      这是“任何非字母或字符串的开头”,后跟您要查找的单词,然后是“任何非字母或字符串的结尾”

      【讨论】:

      • 感谢詹姆斯。有用。但是,我想了解您是如何做到的。您能否指出我在这里阅读这些正则表达式符号的含义以及如何应用这些符号以便我能够理解它们并开始使用它们?当我用谷歌搜索这些时,我迷失了很多材料,我不确定哪一个会提供最好的信息。现在,老实说,在我看来,它们就像一堆角色,一只未经训练的眼睛!
      • 如果单词“the”是 pl/sql 代码中的变量怎么办。附加似乎在这里不起作用:'([^[:alpha:]]|^) || || ([^[:alpha:]]|$)'
      • @Casey:这是我使用的语法:sqlsnippets.com/en/topic-10764.html
      • @Casey:附加应该可以工作,但很难从评论中看出,但我认为你写错了。记住它必须是一个字符串(在引号中),bars,variable,bars,string in quotes,所以,'([^[:alpha:]]|^)' || || '([^[:alpha:]]|$)'
      • 不错。类似的方法:'(^|\s)the(\s|$)'
      猜你喜欢
      • 2017-03-27
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2017-08-06
      • 2023-01-12
      相关资源
      最近更新 更多