Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL regexp\u替换多个字_Oracle_Regexp Replace - Fatal编程技术网

Oracle PL/SQL regexp\u替换多个字

Oracle PL/SQL regexp\u替换多个字,oracle,regexp-replace,Oracle,Regexp Replace,我有一个字符串“TICKER:ibmcorporationinc.”,我想删除TICKER及其值,只获取oraclepl/SQL中的剩余部分 因此,我提出了这个问题,但它并没有按照我预期的方式工作: SELECT REGEXP_REPLACE( 'TICKER: IBM IBM Corporation Inc.', '(.*):[[:space:]](.*)[[:space:]](.*)', '\3') FROM dual; 我希望“\3

我有一个字符串“TICKER:ibmcorporationinc.”,我想删除TICKER及其值,只获取oraclepl/SQL中的剩余部分

因此,我提出了这个问题,但它并没有按照我预期的方式工作:

SELECT REGEXP_REPLACE(
           'TICKER: IBM IBM Corporation Inc.',
           '(.*):[[:space:]](.*)[[:space:]](.*)', '\3')
      FROM dual;
我希望“\3”会给我带来“IBM公司”,但结果我只得到了“公司”

REGEXP_REPLACE('TICKER:IBMIBMCORPORATIONINC.','(.*):[[:SPACE:]](.*)[[:SPACE:]](.*)','\3') 
----------------------------------------------------------------------------- 
Inc.                                                                                      

1 rows selected
更新:

SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '(.*):[[:space:]](.*)[[:space:]](.*)', '\1|\2|\3')
  FROM dual;
结果:

REGEXP_REPLACE('TICKER:IBMIBMCORPORATIONINC.','(.*):[[:SPACE:]](.*)[[:SPACE:]](.*)','\1|\2|\3') 
-------------------------------------------------------------------------------- 
TICKER|IBM IBM Corporation|Inc.
正则表达式中缺少什么

谢谢

SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '(.*):[[:space:]]([^ ]*)[[:space:]](.*)', '\3')
  FROM dual;
你的第二个抓取表情是抓取一切,包括下一个空间

我应该提到,我是在Oracle中测试的,而不是PL/SQL。不过,我想没什么区别

PS:以下备选方案也适用:

-- using only one capturing expression
SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '.*: [^ ]* (.*)', '\1')
  FROM dual;

  -- using no capturing expressions
  SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '.*: [^ ]* ', '')
  FROM dual;
你的第二个抓取表情是抓取一切,包括下一个空间

我应该提到,我是在Oracle中测试的,而不是PL/SQL。但我认为这没有什么区别

PS:以下备选方案也适用:

-- using only one capturing expression
SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '.*: [^ ]* (.*)', '\1')
  FROM dual;

  -- using no capturing expressions
  SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '.*: [^ ]* ', '')
  FROM dual;
或者,您的代码不需要太多更改即可正常工作(将其锚定到字符串开头,并将前两个通配符匹配转换为非贪婪):

或者,您的代码不需要太多更改即可正常工作(将其锚定到字符串开头,并将前两个通配符匹配转换为非贪婪):


问:您是否尝试过
'\2'
?另请参见:Q:您是否尝试过
'\2'
?另请参见:我一直在考虑将前两个单词替换为NULL,假设它们始终存在,并且值(符号?)将始终是1个单词):
“\w+:\w+”
可能应该通过锚定到字符串的开头来将其收紧一点:
“^\w+:\w+”
。我一直在考虑将前2个单词替换为NULL,假设它们始终存在并且值(符号?)将始终是一个单词):
“\w+:\w+”
可能应该通过锚定到字符串开头来将其收紧一点:
“^\w+:\w+”
。不太可能,但人们永远不会知道,请尝试使用包含冒号的公司名称:
“TICKER:IBM:IBM Co:rporation:Inc.”
。去显示应该首先运行一个查询来检查数据中的冒号。关于包含冒号的描述,这一点很好。你的问题似乎处理得很好。谢谢+1@JKK总是期待意外!根据数据的来源以及验证(或很可能未验证)的程度,各种crud都可以被接受并最终进入数据库。在做出诸如“公司名称永远不会包含冒号”之类的假设之前,一定要对数据进行一些合理性检查:-)是的,同意。在我的场景中,这些数据总是得到很好的维护(因为它是由另一层生成的),并且没有任何非alpha或特殊字符。话虽如此,我还是采用建议的方法(以防万一)。谢谢。@JKK解决了
问题,还为您的原始查询添加了一个简单的修复程序。不太可能,但谁也不知道,请尝试使用包含冒号的公司名称:
“TICKER:IBM:IBM Co:rporation:Inc.”
。去显示应该首先运行一个查询来检查数据中的冒号。关于包含冒号的描述,这一点很好。你的问题似乎处理得很好。谢谢+1@JKK总是期待意外!根据数据的来源以及验证(或很可能未验证)的程度,各种crud都可以被接受并最终进入数据库。在做出诸如“公司名称永远不会包含冒号”之类的假设之前,一定要对数据进行一些合理性检查:-)是的,同意。在我的场景中,这些数据总是得到很好的维护(因为它是由另一层生成的),并且没有任何非alpha或特殊字符。话虽如此,我还是采用建议的方法(以防万一)。谢谢。@JKK修复了
问题,还为原始查询添加了一个简单的修复程序。
SELECT REGEXP_REPLACE(
           'TICKER: IBM IBM: Corporation Inc.',
           '^(.*?):[[:space:]](.*?)[[:space:]](.*)',
           '\3'
        )
FROM DUAL;