如何在Oracle中解析字符串?

问题描述

| 如何在Oracle的以下字符串中解析\“ request \”的值?
<!-- accountId=\"123\" activity=\"add\" request=\"add user\" -->
请求的大小和位置是随机的。     

解决方法

        您可以使用正则表达式查找此内容:
regexp_replace(str,\'.*request=\"([^\"]*)\".*\',\'\\1\')
    ,        用
INSTR(givenstring,stringchartosearch,start_position)
查找\'request = \“ \'的位置并找到结束\'\” \'的位置。 然后使用
substr(string,starting_position,length)
。     ,        您会同时使用
instr
substr
此示例仅出于示例目的。由于它不是很干净,请勿在生产代码中使用它。
substr(my_str,-- find request=\" then get index of next char.
       instr(my_str,\'request=\"\') + 9,-- This is the second \" after request. It does not allow for escapes
       instr(substr(my_str,instr(my_str,\'request=\"\')),2))
    ,        以下是我测试过的cwallenpoole和Craig的变体。对于regexp-请注意,如果\“ request = \”不存在,则结果将是整个字符串。 user349433也在那里,在搜索中\“ request = \”之前的空格同样适用:
SET serveroutput ON

DECLARE
  l_string             VARCHAR2(100) := \'<!-- accountId=\"123\" activity=\"add\" request=\"add user\" -->\';
  l_result_from_substr VARCHAR2(50);
  l_result_from_regexp VARCHAR2(50);
BEGIN

  SELECT SUBSTR(l_string,instr(l_string,instr(SUBSTR(l_string,\'\"\',2)-1),regexp_replace(l_string,\'.* request=\"([^\"]*)\".*\',\'\\1\')
  INTO l_result_from_substr,l_result_from_regexp
  FROM dual;

  dbms_output.put_line(\'Result from substr: \'||l_result_from_substr);
  dbms_output.put_line(\'Result from regexp: \'||l_result_from_regexp);

END;
/
    ,        请注意,等号\“ = \”不一定必须紧接在分配中的请求变量之后。因此,搜索\“ request = \”并非完全正确。您应该使用INSTR创建一个基本的有限状态机,首先找到\“ request \”,然后找到\“ = \”,...     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...