2015-04-20 78 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) = /.*?-.*?-(.*)-.*-.*/; 

.*?是非貪婪匹配,這意味着匹配任何數量的任何字符,但沒有必要以上,以匹配正則表達式。在第二個和第三個破折號之間使用.*是一個貪婪的匹配,在匹配正則表達式的同時匹配儘可能多的字符,並且使用它將捕獲其中帶有任何額外破折號的單詞。

相關問題