【问题标题】:How to capture characters after last pattern occurrence with regex?如何使用正则表达式在最后一次出现模式后捕获字符?
【发布时间】:2017-08-10 17:25:46
【问题描述】:

我目前正在使用此匹配最后一次出现的模式:

__(?:.(?!__+))+$

模式是“__”

但是,我需要匹配模式之后的字符,而不是模式本身。

例如,给定字符串my__field__name__options

我需要捕获“选项”,但上面的正则表达式捕获了“__options”。

【问题讨论】:

    标签: php regex regex-negation


    【解决方案1】:

    如果没有前瞻,你可以在 PHP 中使用这个正则表达式:

    .*__\K.+
    

    RegEx Demo

    RegEx 拆分:

    .*   # match zero or more characters (greedy match)
    __   # match "__"
    \K   # reset matched info
    .+   # match 1 or more characters (greedy)
    

    【讨论】:

    • 或只是__([^_]+)$
    • 是的,这也可以正常工作,但 .*__\K.+ 需要更少的 # 步来返回结果。
    【解决方案2】:

    你可以试试:

    .*__(.+)
    

    .* 匹配任何文本,如果有的话
    __ 匹配 __(不贪心)
    (.+) 匹配并捕获 () 任何文本

    https://regex101.com/r/bus5vi/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 2017-08-15
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多