下页丶莫 2024-07-22 20:15 采纳率: 25%
浏览 17
已结题

oracle中的正则匹配

在oracle中,有个字符串 'YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43)' ,用regexp_substr 函数,分别取出'H900019','#24.#25','2024/7/01/10:43',正则表达式怎么写('#24.#25'中 的个数是不固定的,可能是'#01',也可能是'#01.#03.#04.#24.#25',最多25个)?或者说还有其他好的方法吗?

  • 写回答

35条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-07-22 20:16
    关注
    获得4.00元问题酬金

    🕗晚上好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:浮生寄墟丘,不与红尘谋,身披烟波立云舟。一扇擎青穹,飘洒翳孤踪,梦变鲲鹏振长空。

    Oracle 正则表达式提取字符串

    以下是使用 regexp_substr 函数提取所需字符串的解决方案:

    -- 测试字符串
    WITH test_data AS (
      SELECT 'YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43)' AS str FROM dual
    )
    
    -- 从测试数据中提取信息
    SELECT
        str,
        regexp_substr(str, 'H\d+', 1, 1) AS code,
        regexp_substr(str, '(#\d+\.?){1,25}', 1, 1) AS review_numbers,
        regexp_substr(str, '\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)', 1, 1) AS date_time
    FROM
      test_data;
    
    

    代码解释:

    1. WITH test_data AS (...): 创建一个名为 test_data 的公用表表达式 (CTE),其中包含你的测试字符串。
    2. regexp_substr(str, 'H\d+', 1, 1) AS code:
      • regexp_substr: 用于在字符串中查找匹配正则表达式的子字符串。
      • str: 要搜索的字符串。
      • 'H\d+': 正则表达式,匹配以 "H" 开头后跟一个或多个数字的字符串。
      • 1: 指定从字符串的第一个字符开始搜索。
      • 1: 返回第一个匹配项。
    3. regexp_substr(str, '(#\d+\.?){1,25}', 1, 1) AS review_numbers:
      • '(#\d+\.?){1,25}': 正则表达式,匹配以 "#" 开头,后跟一个或多个数字,可选的句点 ".",重复出现 1 到 25 次的字符串。
    4. regexp_substr(str, '\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)', 1, 1) AS date_time:
      • '\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)': 正则表达式,匹配格式为 "(YYYY/MM/DD/HH:MM)" 的日期时间字符串。

    输出结果:

    | str | code | review_numbers | date_time | |---------------------------------------------------------------------|----------|----------------|----------------------| | YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43) | H900019 | #24.#25 | (2024/7/01/10:43) |

    注意:

    • 上述代码中的正则表达式可以根据你的实际需求进行调整。
    • 如果你使用的是 Oracle 10g 或更早版本,则不支持 WITH 子句,你需要将测试数据直接写入 FROM 子句中。
    评论

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 创建了问题 7月22日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物