2015-04-20 21 views
1

工作,我有喜欢的格式的字符串:不能得到一个特定的正则表达式在Perl

project-version-project_test-type-other_info-other_info.file_type 

我可以去除大部分的我需要走出这个字符串在大多数情况下的信息。当我的版本中有一个额外的限定字符时(即通常是5个字符,但有时添加了6个字符),我会遇到麻烦。我之前使用子字符串去除多余的信息并获得'project_test-type',但是现在我需要切换到正则表达式(主要是为了处理额外的版本字符)。我可以继续使用子字符串,并根据我是否有额外的版本字符来改变长度,但是在这里,正则表达式似乎更合适。

我尝试使用模式,如:

my ($type) = $_ =~ /.*-.*-(.*)-.*/; 

但额外的“ - ”我不能简单地空间我正则表达式使用的字符在“project_test型”是指。

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


的更多信息: 作为更人类可读例如,该信息通过以下方式被分组:

project - version - project_test-type - other_info - other_info . file_type 
  • '项目' 是字符的一个简单的字符串
  • '版本'通常是一个5整数的字符串,但有时后面跟着一个字符,即11111是正常的,11111A是罕见的发生。
  • 'project_test-type'是与项目相关的特定测试,它可以同时具有'_'和' - ',否则为char名称
  • 'other_info'的两种情况都是系统的附加位信息一个IP地址或另一个版本号。第一没有固定的长度,而第二始终为10个字符长
+0

您能否为项目版本,other_info等添加哪些值? – maraca

+0

你能举例通常5,有时6吗? –

+0

@karthikmanchala通常版本是11111,有时版本是11111A – jkeuhlen

回答

5

由于没有比所希望的一个其他字段可以包含-,任何额外的-属于所需的字段。

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

[^-]一个字符,这不是一个-匹配。
[^-]*匹配零个或多个不是-的字符。

+0

你可以给你的答案添加一个解释吗? – jkeuhlen

+0

更新了我的答案。 – ikegami

0

您可以使用

/\w+\s*-\s*\d{5}[a-zA-Z]?\s*-\s*(.*?)(?=\s*-\s*\d)/ 

说明:

  • \w+\s*- ==>匹配字符序列后跟任何数量的空格和-
  • \d{5}[a-zA-Z]? ==>总是5位数字与一个或零字符
  • (.*?) =>以非贪婪的方式匹配所有内容
  • (?=\s*-\s*\d) =>期待的数字,停止(因为IP以数字开头)

Demo and Explanation

+0

您能否在答案中包含更多的解释而不仅仅是外部链接?这是有帮助的,但防止链接腐烂是很好的。 – jkeuhlen

+0

@jkeuhlen更新回答您的规格并添加说明:) –

1

要匹配的一切:在

/^([^-]+)-([^-]+)-(.+)-([^-]+)-([^-]+)\.([a-zA-Z0-9]+)$/ 

[]定义的字符集和^一个集合的开始意味着“不”。一个集合中的-通常意味着一个范围,除非它在开始或结束。所以[^-]+消耗尽可能多的非短划线字符(至少一个)。

+1

ikegami一直都是正确的... – maraca

+0

但这是一个伟大的尝试。谢谢您的帮助。池上的解决方案只是一点点清洁 – jkeuhlen

0

贪婪/非贪婪方法

($type) = /.*?-.*?-(.*)-.*-.*/; 

.*?是非贪婪匹配,这意味着匹配任何数量的任何字符,但没有必要以上,以匹配正则表达式。在第二个和第三个破折号之间使用.*是一个贪婪的匹配,在匹配正则表达式的同时匹配尽可能多的字符,并且使用它将捕获其中带有任何额外破折号的单词。

相关问题