Regex 在oracle-PL/SQL中使用正则表达式查找POBOX

Regex 在oracle-PL/SQL中使用正则表达式查找POBOX,regex,oracle,plsql,Regex,Oracle,Plsql,我想使用oracle-PL/SQL中的正则表达式从出现在单词pobox之后的字符串中提取pobox值。 下面是一些例子 I/p o/p 类似这样的东西可能会帮助您: WITH the_table AS (SELECT '1. COMPANY (W L L ) POBOX - 24440 DOHA QATAR TEL 4765888' line FROM dual UNION SELECT '2. STAR LIMITED

我想使用oracle-PL/SQL中的正则表达式从出现在单词pobox之后的字符串中提取pobox值。 下面是一些例子 I/p

o/p


类似这样的东西可能会帮助您:

WITH the_table AS (SELECT '1. COMPANY (W L L ) POBOX - 24440 DOHA QATAR TEL 4765888' line FROM dual
                   UNION
                   SELECT '2. STAR LIMITED POBOX PO KHUPARI PO KHUPARI, TQ-WADA,DIST-THANE 421312INDIA' FROM dual
                   UNION
                   SELECT '3. LENNOX ACCOUNT POBOX - N-4875 SD- THE BAHAMAS' FROM dual
                   UNION
                   SELECT '4. MEDHIN WEREDA 13, ADDIS ABABA, ETHIOPIA, POBOX- 1110-1668 //UA' FROM dual
                   UNION
                   SELECT '5. UHTHOFF, SC POBOX M-2059 06000 MEXICO' FROM dual
                   UNION
                   SELECT '6. PHARMACIE AKWABA POBOX AVENUE ESPEREY 00000 ABIDJAN 45 (COTE D IVOIRE),' FROM dual
                   UNION
                   SELECT '7. CAAS POBOX 1 .//SG' FROM dual
                   UNION
                   SELECT '8. CORAL TECH PETER MAYNARD CO BAY DEVEAUX STREETS 2ND FLOOR POBOX N-1000' FROM dual
                   UNION
                   SELECT '9. GULF OCEAN CENTRE - MONTAGU FORESHORE EAST BAY STREET POBOX SS -19084' FROM dual
                   UNION
                   SELECT '10. AHMED SAEED DAMMAM 2044 31453 POBOX 011383-KSA' FROM dual
                   UNION
                   SELECT '11. MISR COMPRESSOR (CO) 10 TH OF INDUSTRIAL ZONE A-2 POBOX 1001' FROM dual
                   UNION
                   SELECT '12. NOKIA AND NETWORKS OY C/O NSN FRANCE POBOX1 3 KARAPORTII' FROM dual
                   UNION
                   SELECT '13. HEWLETT PACKARD EUROP BV POBOX 100- POBOX 100-CH-1217' FROM dual
                   UNION
                   SELECT '14. DUMONT BERGMAN BIDER + CO., S.C. POBOX456 DELEGACION CUAUHTEMO MX' FROM dual)                   
SELECT line, REGEXP_SUBSTR(line,'(.+?)(POBOX.*?)([0-9]([0-9\-]*[0-9])?)(.+)?',1,1,null,3) pobox
FROM the_table 
ORDER BY to_number(replace(substr(line,1,2),'.'))

你试图做什么来解决这个问题?显示您当前拥有的代码。您好,我尝试了类似REGEXP_REPLACE(REGEXP_SUBSTR(第行,[[:digit:][]].[:digit:][-]+[:digit:][]',INSTR(第行,'POBOX'),“^-”)的方法。。谢谢你的帮助。这与我给出的值配合得很好。。但对于其他一些模式来说,它是失败的。对于低于标准的模式,它是失败的1.CORAL TECH PETER MAYNARD CO BAY Devoux STREETS二楼POBOX N-1000''2。海湾海洋中心-蒙塔古前滨东湾街邮政信箱SS-19084''3。AHMED SAEED DAMMAM 2044 31453邮政信箱011383-KSA''4。MISR压缩机(CO)A-2工业区10号POBOX 1001''5。诺基亚和网络OY,不包括NSN FRANCE POBOX1 3 Karaporti''6。惠普欧洲有限公司POBOX 100-POBOX 100-CH-1217''7。杜蒙·伯格曼·拜德+有限公司,S.C.POBOX456 DELEGACION CUAUHTEMO MX'。。。。。。抱歉,我不知道如何在代码中发布这些值。是的,正则表达式无法处理这些值,因为POBOX现在不仅由数字组成。我们需要知道每一种可能的POBOX格式,才能得出一个常规表达式。我修改了原来的问题,添加了更多的示例。我想现在它涵盖了大部分的组合。@VidyaPandey我刚刚编辑了我的答案,以适应您提供的新数据。它现在正在工作,但不能与数据库中的每个pobox一起工作
1. 24440
2. 421312
3. 4875
4. 1110-1668
5. 2059
6. 00000
7. 1
8. 1000
9. 19084
10. 011383
11. 1001
12. 1
13. 100
14. 456
WITH the_table AS (SELECT '1. COMPANY (W L L ) POBOX - 24440 DOHA QATAR TEL 4765888' line FROM dual
                   UNION
                   SELECT '2. STAR LIMITED POBOX PO KHUPARI PO KHUPARI, TQ-WADA,DIST-THANE 421312INDIA' FROM dual
                   UNION
                   SELECT '3. LENNOX ACCOUNT POBOX - N-4875 SD- THE BAHAMAS' FROM dual
                   UNION
                   SELECT '4. MEDHIN WEREDA 13, ADDIS ABABA, ETHIOPIA, POBOX- 1110-1668 //UA' FROM dual
                   UNION
                   SELECT '5. UHTHOFF, SC POBOX M-2059 06000 MEXICO' FROM dual
                   UNION
                   SELECT '6. PHARMACIE AKWABA POBOX AVENUE ESPEREY 00000 ABIDJAN 45 (COTE D IVOIRE),' FROM dual
                   UNION
                   SELECT '7. CAAS POBOX 1 .//SG' FROM dual
                   UNION
                   SELECT '8. CORAL TECH PETER MAYNARD CO BAY DEVEAUX STREETS 2ND FLOOR POBOX N-1000' FROM dual
                   UNION
                   SELECT '9. GULF OCEAN CENTRE - MONTAGU FORESHORE EAST BAY STREET POBOX SS -19084' FROM dual
                   UNION
                   SELECT '10. AHMED SAEED DAMMAM 2044 31453 POBOX 011383-KSA' FROM dual
                   UNION
                   SELECT '11. MISR COMPRESSOR (CO) 10 TH OF INDUSTRIAL ZONE A-2 POBOX 1001' FROM dual
                   UNION
                   SELECT '12. NOKIA AND NETWORKS OY C/O NSN FRANCE POBOX1 3 KARAPORTII' FROM dual
                   UNION
                   SELECT '13. HEWLETT PACKARD EUROP BV POBOX 100- POBOX 100-CH-1217' FROM dual
                   UNION
                   SELECT '14. DUMONT BERGMAN BIDER + CO., S.C. POBOX456 DELEGACION CUAUHTEMO MX' FROM dual)                   
SELECT line, REGEXP_SUBSTR(line,'(.+?)(POBOX.*?)([0-9]([0-9\-]*[0-9])?)(.+)?',1,1,null,3) pobox
FROM the_table 
ORDER BY to_number(replace(substr(line,1,2),'.'))