首页 > 解决方案 > 在最后一个斜线后获得 5 个字符

问题描述

我需要最后一个斜杠后的前 5 个字符。我可以处理在斜线后获取所有符号,但不能只取其中的前 5 个。

REGEX_SUBSTR('people/capital/base/flagedbyloggers','[^/]*$')

有了[^/]*$,我得到flagedbyloggers,但我只需要flaged,前 5 个符号。

使用[^/]{5}$,我得到ggers,这是最后一个斜杠后的 5 个最后一个符号,但我需要 flaged,最后一个斜杠后的前 5 个符号。

有时最后一个斜杠后面的字符串可能更短,所以它必须使用少于 5 个字符,例如people/capital/base/no应该只返回no.

环境是ORACLE数据库。我使用在线工具https://regexr.com/得到的结果相同。

标签: sqlregexoracle

解决方案


您可以匹配直到最后一次出现/带有捕获组和{1,6}要匹配的量词的 anoflaged

请注意flaged后面是 6 个字符而不是 5 个字符/

此页面显示如何使用REGEXP_SUBSTRREGEXP_REPLACE从匹配中获取捕获组。

^.*/([^/]{1,6})[^/]*$

解释

  • ^.*/确保匹配最后一次出现的/
  • (捕获组 1
    • [^/]{1,6}匹配 6 次以外的任何字符/
  • )关闭组 1
  • [^/]*匹配 0+ 次出现的任何字符,除了/
  • $字符串结束

查看正则表达式演示


推荐阅读