在plsql的一个句子中检索第二个单词到最后一个单词

Posted

技术标签:

【中文标题】在plsql的一个句子中检索第二个单词到最后一个单词【英文标题】:Retrieving second word to last but one word in a sentence in plsql 【发布时间】:2016-04-16 19:33:37 【问题描述】:

我编写了一个在 plsql 中正确执行但输出错误的程序。从逻辑上讲,我没有看到代码有任何问题。代码如下:

begin
  inpstr := rtrim(ltrim(regexp_replace(inp,'\s2,','')));
  lastpos := instr(inpstr,' ',-1);
  out3 := SUBSTR(inpstr, INSTR(inpstr,' ',-1) + 1);
  pos := instr(inpstr,' ');
  out1 := substr(inpstr,1,pos);
  out2 := substr(inpstr,pos,lastpos);
end;

O/P:

dbms_output.put_line('First Word:: '||out1||' '||'Second Word:: '||out2||' '||'Lastword:: '||out3);

PROCEDURE SPLITWORDS compiled
anonymous block completed
First Word:: Welcome  Second Word::  to the world of analyti Lastword:: analytics!

但是第二个词应该检索到“to the world of”,但它会获取分析。

谁能告诉我我的代码有什么问题。

谢谢, 敏捷。

【问题讨论】:

【参考方案1】:

分配out2时,至少要从lastPos中减去pos

因为您的示例文本中的lastPos “欢迎来到分析的世界!” 将是 24,pos 将有 8,因此来自 pos 8 的子字符串长度为 24是...对:“到分析世界”

【讨论】:

【参考方案2】:

substr函数的第三个参数是子串的长度,不是结束字符的位置。从lastpos 中减去pos(见下文)将使您的代码正常工作。

out2 := substr(inpstr, pos, lastpos - pos);

【讨论】:

我希望第一个和最后一个单词之间的所有单词都为 out2 @Dex 哎呀,对不起。我会修正我的答案

以上是关于在plsql的一个句子中检索第二个单词到最后一个单词的主要内容,如果未能解决你的问题,请参考以下文章

Search and Replace -freecodecamp算法题目

freeCodeCamp:Search and Replace

Sed:以/etc/passwd文件为模板

Oracle PLSQL 函数调用到第二个函数

利用模拟解决“山羊拉丁文”问题

利用模拟解决“山羊拉丁文”问题