无法在Perl中使用特定的正则表达式

jke*_*len 1 regex perl

我有一个格式如下的字符串:

project-version-project_test-type-other_info-other_info.file_type
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我可以从这个字符串中删除大部分需要的信息.当我的版本中有一个额外的限定字符时(即通常是5个字符,但有时会添加第6个字符),我的麻烦就出现了.

以前,我使用子字符串来删除多余的信息并获得'project_test-type'但是,现在我需要切换到正则表达式(主要用于处理额外的版本字符).我可以继续使用子串并根据我是否有额外的版本字符来改变长度,但正则表达式似乎更合适.

我尝试过使用以下模式:

my ($type) = $_ =~ /.*-.*-(.*)-.*/;
Run Code Online (Sandbox Code Playgroud)

但是'project_test-type'中的额外' - '意味着我不能简单地使用该字符来填充我的正则表达式.

我可以用什么正则表达式从我的字符串中获取'project_test-type'?


更多信息:作为一个更具人类可读性的示例,信息按以下方式分组:

project - version - project_test-type - other_info - other_info . file_type
Run Code Online (Sandbox Code Playgroud)
  • 'project'是一个简单的字符串
  • 'version'通常是一个由5个整数组成的字符串,但有时后跟char,即11111是正常的,11111A是罕见的.
  • 'project_test-type'是一个与项目关联的特定测试,该项目可以同时包含'_'和' - '字符
  • "other_info"的两种情况都是系统的附加信息位,如IP地址或其他版本号.第一个没有固定长度,而第二个总是10个字符长

ike*_*ami 5

由于除了期望的字段之外不能包含-任何-字段,因此任何额外字段都属于所需字段.

      +--------------------------- project
      |     +--------------------- version
      |     |   +----------------- project_test-type
      |     |   |      +---------- other_info
      |     |   |      |     +---- other_info.file_type
      |     |   |      |     |
  ____| ____|  _|  ____| ____|
/^[^-]*-[^-]*-(.*)-[^-]*-[^-]*\z/
Run Code Online (Sandbox Code Playgroud)

[^-]匹配一个不是a的字符-.
[^-]*匹配零个或多个不是的字符-.