我有一个格式如下的字符串:
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
| | +----------------- project_test-type
| | | +---------- other_info
| | | | +---- other_info.file_type
| | | | |
____| ____| _| ____| ____|
/^[^-]*-[^-]*-(.*)-[^-]*-[^-]*\z/
Run Code Online (Sandbox Code Playgroud)
[^-]匹配一个不是a的字符-.
[^-]*匹配零个或多个不是的字符-.