PCRE Regex:排除单词的最后一部分

PCRE Regex: Exclude last portion of word

我正在尝试在 PCRE 中编写一个正则表达式,它捕获单词的第一部分并排除第二部分。第一部分需要容纳不同的值,具体取决于从何处发起交易。这是一个例子:

原始文本:

.controller.CustomerDemographicsController

正则表达式模式尝试:

\.controller\.(?P<Controller>\w+)

尝试实现的结果(在粗体中是我想保存在命名捕获组中的唯一内容):

.controller.CustomerDemographicsController

注意:我试图排除使用 ^、回顾和展望。

非常感谢任何帮助。

您可以将 Controller 组中的字符匹配到最后一个大写字母:

\.controller\.(?P<Controller>\w+)(?=\p{Lu})

regex demo详情:

  • \.controller\. - .controller\. 字符串
  • (?P<Controller>\w+) - 命名捕获组“Controller”:一个或多个单词字符尽可能多
  • (?=\p{Lu}) - 下一个字符必须是大写字母。

请注意,(?=\p{Lu}) 使 \w+ 在最后一个大写字母之前停止,因为 \w+ 模式由于 + 量词而贪婪。

另外,使用

\.controller\.(?P<Controller>[A-Za-z]+)[A-Z]

参见proof

解释:

--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  controller               'controller'
--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  (?P<Controller>           group and capture to Controller:
--------------------------------------------------------------------------------
    [A-Za-z]+                any character of: 'A' to 'Z', 'a' to 'z'
                             (1 or more times (matching the most
                             amount possible))
--------------------------------------------------------------------------------
  )                        end of Controller group
--------------------------------------------------------------------------------
  [A-Z]                    any character of: 'A' to 'Z'