2012-04-20 79 views
2

我有一個字符串,並希望得到它的一部分。假設我有一個字符串說「set aid ODU4-4-3」。我只想從中取出ODU。而字符串的模式不固定。 IT可能有些像ODU,ODU4,ODUX。我沒有得到如何獲取這個正則表達式在Perl/TCL

$aid = "ODU4-9-1"; 
$aid =~ /(\w)+\d*-\d-\d/; 
print " value is $1" 

輸出

value is ODU4 

我需要的值是ODU只,而字符串模式可能會改變。它可能只是ODU-4-3或者可能會去ODU4-4-3。

my @allmatches = $aid =~ /([A-Z]{3}).*?\-\d\-\d/; 
+0

什麼範圍值可以ODU走? – Scroog1 2012-04-20 09:31:05

+0

模式類似於ODU-9-1,STS-9-1,STS3C-9-1,ODU4-9-1。問題是ODU可能是ODU或根據需要可能附加一些數字。 – Nitesh 2012-04-20 09:32:54

+0

Nitesh,如果你提到ODU的所有情況,這將是很好的。 – 2012-04-20 09:35:36

回答

2

的@ M42的回答返回所有匹配版本

$aid =~ /([A-Z]{3}).*?-\d-\d/; 

任何長度大於0和不區分大小寫,使用

$aid =~ /([a-zA-Z]+).*?-\d-\d/; 
+0

ODU不是固定的。它可能會跟隨任何數字或沒有數字的字母組合。 – Nitesh 2012-04-20 09:34:40

+0

問題是一個字符串就像我描述的模式。我只想在第一種模式下只輸入字母 – Nitesh 2012-04-20 09:35:46

+0

這不符合'STS3C-9-1' – Toto 2012-04-20 09:37:19

1

如何:

+0

這好多了。謝謝 – Nitesh 2012-04-20 09:38:26

+0

好得多 – Nitesh 2012-04-20 09:43:29

+0

@Nitesh:不客氣。 – Toto 2012-04-20 09:46:18

1

如果你只想在odu字母,那麼這應該做的伎倆

$aid =~ /([[:alpha:]]+)/; 
+0

太棒了。但它是如何工作的。這將獲取字符串中的所有aplhabets,或者我們可以使用這個作爲/([:alpha:]).*-\d-\d/ – Nitesh 2012-04-20 09:44:54

+0

工作是一個有趣的,如果我得到你的支持..... :) – Nitesh 2012-04-20 09:46:43

+0

檢查** man grep **並搜索** alpha **以獲取有關字符類的更多說明。如果你對ODU之後的細節不感興趣,那麼這應該做** /([[:alpha:]] +)*/** – tuxuday 2012-04-20 09:51:32

3

和Tcl的:

if {[regexp {^[[:alpha:]]+} $string letters]} { 
    puts $letters 
}