Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Sql 使用正则表达式Oracle_Sql_Regex_Oracle - Fatal编程技术网

Sql 使用正则表达式Oracle

Sql 使用正则表达式Oracle,sql,regex,oracle,Sql,Regex,Oracle,我希望使用正则表达式捕获字符串中的最后一个值。我复制了一个我想要解析的数据示例。我使用的是oracle语法 示例数据: ||CULTURE|D0799|D0799HTT| ||CULTURE|D0799|D0799HTT|| 我希望在最后一组管道之前去掉最后一个值: D0799HQTT D0799HQTT 我可以创建一个regexp\u substr,返回区域性: REGEXP_SUBSTR(c.field_name, '|[^|]+|') 但是我还没有弄清楚如何从末尾开始查找一个或两个

我希望使用正则表达式捕获字符串中的最后一个值。我复制了一个我想要解析的数据示例。我使用的是oracle语法

示例数据:

||CULTURE|D0799|D0799HTT|
||CULTURE|D0799|D0799HTT||
我希望在最后一组管道之前去掉最后一个值:

D0799HQTT 
D0799HQTT
我可以创建一个regexp\u substr,返回区域性:

REGEXP_SUBSTR(c.field_name, '|[^|]+|')

但是我还没有弄清楚如何从末尾开始查找一个或两个管道,并返回我要查找的值。如果您需要更多信息,请告诉我。

考虑以下正则表达式

(?<=\|)[\w\d]*?(?=\|*$)
(?您可以尝试以下方法:

select rtrim(regexp_substr('||CULTURE|D0799|D0799HTT||', 
                     '[[:alnum:]]+\|+$'), '|')
from dual;
或者像这样:

select regexp_replace('||CULTURE|D0799|D0799HTT||', 
                     '(^|.*\|)([[:alnum:]]+)\|+$', '\2')
from dual;

最好拉出所有非管道字符,而不是假设它们将适合特定字符集:

select regexp_replace(regexp_substr('||CULTURE SUBS|INTERNATIONAL TESTING S.A.|ISLAND TEST_PEACE|', '[^|]+\|+$'), '\|', '') from dual;

你试过拆分字符串并提取最后一个非空元素吗?像这样:
array=str.split('|');int i=array.length;while(array[i].isEmpty()){i--}array[i]=yourLastValue;
希望我写的内容清楚。@KamilW。这是如何回答这个问题的(使用正则表达式在Oracle中拆分字符串)?@FrankSchmitt谢谢你提出的好问题。我的想法是,也许作者会在这个例子中使用它:这只是一个快速的反应。干杯你确定甲骨文支持前瞻吗?也许这对“文化潜艇”国际测试S.A.“岛屿测试和平”更容易些。我想返回“岛屿测试和平”。关于如何考虑空格和特殊字符,您有什么建议吗?不要使用自己的类,即
[a-zA-Z0-9]
啊,非常好!非常感谢,您帮助了解了有关正则表达式的更多信息。
SELECT  REPLACE
        (
            REGEXP_SUBSTR(str, '\w+\W{0,}$')
        ,   '|'
        ) AS result
FROM
(
        SELECT  '||CULTURE|D0799|D0799HTT|'  AS str FROM DUAL UNION ALL
        SELECT  '||CULTURE|D0799|D0799HTT||' AS str FROM DUAL
)
;