【问题标题】:PL SQL Patterns MatchingPL SQL 模式匹配
【发布时间】:2017-03-30 13:43:58
【问题描述】:

如果真的是“行首 + 可选空格 + 测试 + 空格”,如何只解释大字符串中的特定单词(例如 test)。还允许单词“test”混合大小写

【问题讨论】:

  • “解释”一个词是什么意思?这不是 SQL 或数据库概念。
  • 我的意思是匹配必须是行首+可选空格+测试+空格的单词test
  • “匹配”也不清楚。看来您正在读取输入字符串,您必须输出它们,要么保持不变,要么进行一些更改。看来您必须删除单词test,除非它是第一个单词?如果单词test 不是在字符串的开头而是在字符串的后面,后面跟着逗号或句点,而不是空格怎么办?如果它在字符串的末尾怎么办?如果字符串不以单词test 开头怎么办 - 您还需要在其他任何地方删除它吗?对于计算机和软件,您需要 100% 明确的问题要求,不应该让任何人猜测。
  • 例如:“测试这就是我要测试的方式”我希望这个输出是:“测试这就是我要测试的方式”
  • @mathguy 正在努力,但请查看stackoverflow.com/help/how-to-ask

标签: regex oracle regex-negation


【解决方案1】:

我正在使用您的输入字符串,如下所示

'    TeSt this is how I am going to tEst going for '

并有意在开头和结尾保留一些空格。下面的代码产生您想要的输出。正如您所提到的,它将替换单词 TEST 的所有实例而不考虑大小写。 我希望这会有所帮助。

  Select 
REGEXP_REPLACE(     --Using RegExp_replace
    ltrim(rtrim(    --Trimming the white spaces
        input1)),   --using the input
        'TEST',     --search criteria
        '',         --Replace with string
        2,          --Starting with which character (you mentioned first occerance should remain
        0,          --Replace all subsequent occurances
        'i')        --case in-sensitive
        from (
Select '    TeSt this is how I am going to tEst going for' as input1 from dual --this is your INPUT)

谢谢, 桑托什

【讨论】:

  • 如果我们想保留一个字符串的整行,只有当单词'test'出现在行首时应该怎么做。如果它出现在任何地方,那么整行应该被删除
【解决方案2】:

将 REGEXP_REPLACE 与所有参数一起使用,您可以...

  1. 提供您想要影响的价值
  2. 提供您要查找的正则表达式
  3. 告诉函数从哪个字符开始
  4. 告诉函数你要替换哪个匹配项
  5. 提供额外的修饰符,其中“i”表示不区分用例

如果您要删除测试的第二个实例、TeSt 或 TEST,这将起作用。您没有提供太多示例和预期结果。

-- Start test data
with test_data as
    (select 'TeSt this is how I am going to tEst going for' as test_string from dual union all
     select 'test hello everyone how are you test' from dual union all
     select 'test_find1();' from dual union all
     select 'test sample 1;' from dual union all
     select 'TEST sample 2;' from dual union all
     select 'test1 hope this is will help test2;' from dual)
-- End test data     
select test_string,
       CASE WHEN REGEXP_LIKE(test_string,'^test\s+','i') THEN
                    REGEXP_REPLACE(test_string,'test','', 1, 2, 'i')
           ELSE NULL END AS result
from   test_data;

更多关于 REGEXP_REPLACE here

【讨论】:

  • 谢谢你,但上面的例子没有处理行首+可选空格和测试后的强制空格
猜你喜欢
  • 2019-04-22
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2011-12-03
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多